【发布时间】:2013-06-08 14:38:36
【问题描述】:
我有一个代码示例:
float f = 3.55f;
printf("%.1f\n", f);
结果是 3.5,而不是所需的 3.6。
float delta = 1e-7;
float f = 3.55f;
printf("%.1f\n", f+delta);
现在结果是 3.6,但是当 f 是 0.0499999f;
printf("%.1f\n", f+delta);
结果是 0.1,而不是 0.0。
我需要一个将 3.55 转换为 3.6、0.0499999 转换为 0.0 的函数,有人提供线索吗?
【问题讨论】:
-
在第二个例子中,你确定仅仅声明另一个变量会改变
printf()的行为吗? -
尝试添加所需精度的一半,例如
f + 0.05,然后用%.1f(或0.005和%.2f等)打印。 -
顺便说一下,
.1f打印出.1f,缺少一个%。 -
在编译代码时启用警告,编译器会警告您缺少的 '%'。在带有 gcc 的 Linux 下,它打印了
warning: too many arguments for format [-Wformat-extra-args],显然该行有问题。
标签: c floating-point rounding