2010-06-18 58 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