2

所以我有一个 CString,它包含一个数值,例如“45.05”,我想将这个数字四舍五入到小数点后一位。

我用这个功能

_stscanf(strValue, _T("%f"), &m_Value);

将值放入我可以舍入的浮点数中。但是,在 45.05 的情况下,我得到的数字是 45.04999 ...它四舍五入到 45.0,人们期望 45.1

如何从我的 CString 中获取正确的值?

TIA

4

3 回答 3

2

如果您需要字符串结果,最好的办法是找到小数点并检查其后的两位数,然后使用它们得出四舍五入的结果。如果您需要一个浮点数,那么......这是没有希望的,因为 45.1 无法准确表示。

编辑:最接近算术舍入的是计算floor(x*10+0.5)/10,但要知道用 45.05 执行此操作不会也不会导致 45.1。

于 2012-03-20T16:40:08.503 回答
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 的十分之一。

于 2012-03-20T17:14:29.747 回答
0

我有一段时间没有使用 C++,但这里是我要采取的步骤。

  1. 计算小数点后的字符
  2. 删除小数
  3. 将字符串转换为 Int
  4. 执行舍入操作
  5. 除以(字符数减一)*10
  6. 将结果存储在浮点数中
于 2012-03-20T17:14:12.553 回答