将双数舍入到十分位数

时间:2011-10-23 23:22:32

标签: c++ double rounding

  

可能重复:
  round() for float in C++

好的,假设我有号码8.47434。我想把它四舍五入到8.5和1位小数。我将如何在C ++中执行此操作

3 个答案:

答案 0 :(得分:4)

乘以10,再舍入{再次10

示例:

round(10 * 8.47434f) / 10;

修改

好的,我发现round()并不总是存在math.h

上述内容适用于gcc和icl(使用Microsoft的库),但不适用于tcc。

但是,

floor()是标准库的一部分。因此,要进行舍入,我们可以添加0.5并使用floor()

示例:

floor(10 * 8.47434f + 0.5f) / 10;

答案 1 :(得分:2)

std::floor(d)+std::floor((d-std::floor(d))*10.0+0.5)/10.0

这样做不会失去精确度,相反于将原始双倍乘以10的其他答案。(顺便说一下,d将是你的数字)

但要预先警告:浮点数不能代表任何。使用双打:1.35将舍入到1.3999999999999999; 123.34首先将123.34999999999999表示为123.3,使其向下舍入为123.4而不是预期的{{1}};等

答案 2 :(得分:0)

你可以将10乘以0.5加入一个int并除以10。

如果数字为负数减去0.5或乘以除以负数十。