所以我有一个 CString,它包含一个数值,例如“45.05”,我想将这个数字四舍五入到小数点后一位。
我用这个功能
_stscanf(strValue, _T("%f"), &m_Value);
将值放入我可以舍入的浮点数中。但是,在 45.05 的情况下,我得到的数字是 45.04999 ...它四舍五入到 45.0,人们期望 45.1
如何从我的 CString 中获取正确的值?
TIA
如果您需要字符串结果,最好的办法是找到小数点并检查其后的两位数,然后使用它们得出四舍五入的结果。如果您需要一个浮点数,那么......这是没有希望的,因为 45.1 无法准确表示。
编辑:最接近算术舍入的是计算floor(x*10+0.5)/10
,但要知道用 45.05 执行此操作不会也不会导致 45.1。
您可以分别提取构成百分之一及以下位置的数字,将它们转换为数字并独立四舍五入,然后将其添加到数字的其余部分:
"45.05" = 45.0 和 0.5 十分之一(0.5 可以用二进制精确表示)
十分之 0.5 比 1
45.0 + 十分之一 = 45.1
不要将此与仅单独处理小数位置混淆。“45.15”不分为 45 和 0.15,它分为 45.1 和 0.5 的十分之一。
我有一段时间没有使用 C++,但这里是我要采取的步骤。