2010-06-18 53 views
3

如何更改號碼的精度,例如:float n = 1.2345並將其存回變量'n'並將其更改爲1.23更改號碼精度

+4

這聽起來像也許你問如何將數字舍入?你會發現很多以前的問題,如果你搜索。 – Cascabel 2010-06-18 13:28:15

+1

你想整理數字或截斷它們嗎?當n = 1.246時會發生什麼? – 2010-06-18 13:33:21

+0

是的,截斷數字並將其放回變量'n'。 – cpx 2010-06-18 13:33:56

回答

7
float n = 1.2345; 
int scaled = n * 100 
n = static_cast<float>(scaled)/100.0; 

或一條線:

n = static_cast<float>(static_cast<int>(n*100))/100; 
+0

我也有類似的問題[這裏](http://stackoverflow.com/questions/35258164/how-to-prevent-numbers-from-showing-up-in-scientific-notations)如果可能,你可以幫助我出去了? – user1950349 2016-02-14 17:05:17

6
#include <cmath> 

n = roundf(n * 100.0f)/100.0f; 

,或者如果您需要截斷而不是圓:

n = truncf(n * 100.0f)/100.0f; 
+0

只需要注意一點:這會舍入浮點數而不是截斷它,這可能是也可能不是Dave18正在尋找的。 – 2010-06-18 13:43:02

+0

@Bill:的確 - 我正在更新它,以便在您添加評論的同時包含截斷的可能性。 ;-) – 2010-06-18 13:47:12

2

float truncated = static_cast<int>(n * 100)/100.0f應該工作。

3

看一看這個問題:

Rounding Number to 2 Decimal Places in C

然而,在C++中,如果你需要把一個數字顯示目的,我不會使用printf,但使用流操作符:

using namespace std; 
cout << setiosflags(ios::fixed) << setprecision(2); 
cout << n; 
+0

奇怪的是,這是downvoted,當它是唯一的答案提及顯示的目的,這可能是OP的用例! +1。 – Cascabel 2010-06-18 13:50:47

+0

@Jefromi:是的,不知道爲什麼這是downvoted。我希望downvoter會做出解釋。 Thx爲upvoting! – 2010-06-18 14:01:04