【发布时间】:2014-02-21 23:53:29
【问题描述】:
我正在计算一个房间的体积,我得到了一个小数点后 6 位的数字。我想知道是否可以将值减少到小数点后 2 位。卷的结果数字来自 5 个不同的变量,我不知道在这种情况下是否重要。
【问题讨论】:
-
是用来显示的吗,比如
printf("%2f", var);?
标签: c floating-point integer decimal rounding
我正在计算一个房间的体积,我得到了一个小数点后 6 位的数字。我想知道是否可以将值减少到小数点后 2 位。卷的结果数字来自 5 个不同的变量,我不知道在这种情况下是否重要。
【问题讨论】:
printf("%2f", var);?
标签: c floating-point integer decimal rounding
你可以使用 printf("%.2f", 20.233232)
【讨论】:
printf() 可以在不同的系统上给出不同的结果。例如,gcc 使用 Banker's Rounding,但不是 MSVC 2010。
在某个数学库的某处(我手头没有 C 引用)中可能有一个 round() 函数浮动(哈哈)。如果不是,一个快速而肮脏的方法是将数字乘以 100(小数点右移 2),加 0.5,截断为整数,然后除以 100(小数点左移 2)。
【讨论】:
浮点值0.01 无法在 IEEE 754 中表示,因此您得到的小数仍然比您要求的多。
更好的方法:只是不要在程序中显示多余的小数。我怀疑你“得到”了 6 位小数;它可能是普通的默认值
printf ("too much accuracy in %f!", yourFloat);
如果有,使用%.2f显示。
稍微差一点的方法,取决于数值范围和您要执行的计算类型:将浮点数乘以 100,四舍五入,然后存储为整数。 100.00% 保证您只会获得两位数的准确度。除法(如果不小心操作,您会丢失 2 位数)和乘法(您会获得 2)时要小心。
【讨论】:
@Rashmi 解决方案提供了一个很好的圆整显示浮点值。
它不会改变原始数字的值。
如果想将浮点值四舍五入到最接近的0.01,请使用round()
#include <math.h>
double d = 1.2345;
d = round(d * 100.0)/100.0;
注意事项:
由于 FP 的限制,四舍五入的值可能不是完全0.01 的倍数,而是给定平台允许的最接近的 FP 数。
当d 非常接近 x.xx5 时,(x 是 0-9 的各种数字)d * 100.0 在调用 round() 之前在乘积中引入了舍入。代码可能会以错误的方式舍入。
【讨论】:
round 可能会增加,而所需的结果是减少。
modf() 可能有帮助?我会考虑你的想法。