2011-10-23 145 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;等