限制浮点精度?
有没有办法将浮点数舍入为2分? 例如: 3576.7675745342556
变为3576.76
。
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)); }
如果要打印出来,请使用可用的任何打印格式化function。
在c ++中
cout << setprecision(2) << f;
要舍入以渲染到GUI,请使用std :: ostringstream
乘以100,舍入为整数(无论如何你想要),除以100.注意,由于1/100不能在浮点中精确表示,因此请考虑保持固定精度的整数。
不要使用浮子。 如果要打印美元,请使用存储分数的整数并在最后2个位置前打印小数点。 浮动几乎总是错误的 ,除非你进行简单的计算(如天真的经济数学模型),其中只有数字的大小真正重要,你永远不会减去附近的数字。
对于那些谷歌搜索格式化浮动到钱像我一样:
#include #include #include 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"
您必须将其作为字符串返回。 将它放回浮子会失去精度。
限制精度:
如果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
双w /舍入:
((long int)(x*100.0 + 0.5)) / 100.0
注意:因为x是float
或double
float
,所以小数部分将始终存在。 它是如何表示#( IEEE 754 )和#的精度之间的区别。
C99支持round()
试试用
std::cout<
应该有效,浮点出现后只有2位数。
试试这个,它完美无缺
float=3576.7675745342556; printf("%.2f",float);
更改其中的一些对象以查看和学习代码。
yourFloatNumber= Float.Round(yourFloatNumber,2); // In C#