2010-08-01 132 views
8

有没有办法将浮点数舍入到2点?例如:3576.7675745342556变成3576.76限制浮点精度?

+4

你的意思是显示或计算? – 2010-08-01 21:30:53

+2

3576.7675745342556变成3576.77,不是吗? – Vladimir 2010-08-01 21:43:36

+2

@弗拉基米尔:不要紧张。舍入是一个模糊的术语,它包含了几个不同的操作,它们具有更精确的含义。向上/向下舍入/朝向零/朝向无穷远/朝向最接近的整数等 – 2010-08-01 21:51:38

回答

12
round(x * 100)/100.0 

如果你必须让事情变得漂浮:

roundf(x * 100)/100.0 

柔性版使用标准库函数:

double GetFloatPrecision(double value, double precision) 
{ 
    return (floor((value * pow(10, precision) + 0.5))/pow(10, precision)); 
} 
+3

请注意,因为二进制浮点不能完全表示大多数小数值,所以当您开始仔细检查较低位时,此答案将不起作用。但是,然后再也没有任何其他答案。 – 2013-05-18 01:28:48

2

乘以100,轮整数(反正你想要的),除以请注意,由于1/100不能精确表示为浮点数,因此请考虑保留固定精度整数。

+1

小数定点整数很可能是这里真正的答案。 – caf 2010-08-02 02:20:27

-5
yourFloatNumber= Float.Round(yourFloatNumber,2); // In C# 
+4

这在Java中有效。如果仔细观察,海报用c/C++标记了它。 – carlsborg 2010-08-01 21:55:37

13

如果您要打印出来,请改用可用的打印格式化功能。

在C++

cout << setprecision(2) << f; 

四舍五入渲染到GUI,使用std :: ostringstream

+5

千万不要参照“如上所述”提供的其他答案。显示答案的顺序随着时间的推移以及根据用户可配置的偏好(按时间或票数排序)而变化。为了解决您的特定问题,可以使用“floor”或“ceil”来代替整型。 – 2010-08-01 23:49:07

+1

为什么不使用'printf'? – Svante 2010-08-02 01:25:02

+1

@Svante,因为我们正在使用C++? – Craig 2010-08-02 01:48:02

2

不要使用浮动。如果要打印美元,请使用存储美分数的整数并在最后2个地方打印小数点。花花公子几乎总是错误的为钱,除非你做简单的计算(如天真的经济数学模型),其中只有数量的大小真正重要,你永远不会减去附近的数字。

0

为了限制精度:
如果x是一个浮子,没有舍入:
(升档由2张十进制数,剥去分数,由2位十进制数下移)

((int)(x*100.0))/100.0F 

浮法瓦特/舍入:

((int)(x*100.0 + 0.5F))/100.0F 

双人的w/o四舍五入:

((long int)(x*100.0))/100.0 

双人瓦特/舍入:

((long int)(x*100.0 + 0.5))/100.0 

注:由于x是一个floatdouble,小数部分总是存在的。这是#如何代表(IEEE 754)和#的精度之间的差异。
C99支持round()

0

尝试使用

std::cout<<std::setprecision(2)<<std::cout<<x;

应该作品,只有2浮点数字后出现。

2

对于那些你使用Google,好像我是格式化浮动钱:

#include <iomanip> 
#include <sstream> 
#include <string> 

std::string money_format (float val) 
{ 
    std::ostringstream oss; 

    oss << std::fixed << std::setfill ('0') << std::setprecision (2) << val; 

    return oss.str(); 
} 
// 12.3456 --> "12.35" 
// 1.2 --> "1.20" 

你必须返回作为一个字符串。把它放回浮标将失去精度。

0

试试这个,它工作在它完美

float=3576.7675745342556; 
printf("%.2f",float); 

改变一些对象来参观和学习的代码。