2011-10-23 105 views
2

可能重复:
round() for float in C++四舍五入双号到十位

好假设我有多少8.47434。我想把它四舍五入到小数点后一位。我会怎么去做这个在C++

+0

对于一个快速和肮脏的解决方案,你可能想特别阅读[这个答案](http://stackoverflow.com/questions/485525/round-for-float-in-c/2249412#2249412)。 – Jon

回答

3

乘以10,再除以10

例子:

round(10 * 8.47434f)/10; 

编辑:

OK,我刚刚发现round()并不总是出现在math.h

上述工作在gcc和icl(与微软的库),但不是在tcc。

floor()然而,它是标准库的一部分。因此,为了四舍五入,我们可以添加0.5并使用floor()

例子:

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

缺少几度的细微差别,IMO – sehe

+0

您可能肯定会**将精度乘以10而丢失,而边缘案例将错误地绕过 – David

0

你可以多10十加0.5转换为int和鸿沟。

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

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;等