舍入CString中包含的值

时间:2012-03-20 16:33:31

标签: c++ c-strings

所以我有一个包含数字值的CString,例如" 45.05"我希望将这个数字四舍五入到小数点后一位。

我使用这个功能

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

将值放入浮点数,我可以舍入。但是在45.05的情况下,我得到的数字是45.04999 ...其中一轮预计为45.1

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

TIA

3 个答案:

答案 0 :(得分:2)

如果您需要字符串结果,最好的办法是找到小数点并检查它后面的两位数,然后用它们来计算舍入结果。如果你需要一个浮点数,那么......由于45.1无法准确表示,所以它毫无希望。

编辑:你可以用算术来计算floor(x*10+0.5)/10,但是知道用45.05这样做不会导致45.1。

答案 1 :(得分:1)

您可以分别提取构成百分位和以下位置的数字,将它们转换为数字并将其单独舍入,然后将其添加到数字的其余部分:

“45.05”= 45.0和0.5十分之一(0.5可以用二进制表示)

回合0.5十分之一到1

45.0 + 1十分= 45.1

不要将此与仅分别处理小数位置混淆。 “45.15”不分为45和.15,它分为45.1和0.5分。

答案 2 :(得分:0)

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

  1. 在Decimal
  2. 之后计算字符数
  3. 删除十进制
  4. 将字符串强制转换为Int
  5. 执行舍入操作
  6. 除以(字符数少于1)* 10
  7. 将结果存储在浮动