【发布时间】:2022-04-22 19:09:53
【问题描述】:
我正在尝试使用printf 打印一些浮点数。
例如:
int main()
{
printf("%.1f",76.75);
return 0;
}
输出:76.8
我对结果有一些疑问。
首先,为什么不打印76.7?
第二,如何四舍五入?
【问题讨论】:
-
为什么要打印 76.7?
-
@ecatmur:该问题的答案归咎于浮点舍入错误,但这是另一种情况,因为数字
76.75被精确表示。 -
FWIW,你的标题是:“为什么 printf 对浮点数进行舍入?”。好吧,因为你告诉它,使用
%.1f格式化字符串。 -
@RudyVelthuis 这个问题是“为什么
37.975不能转换为 37.98?”。这个问题是“为什么76.75转换为 76.8?”。它们是对称对立的问题。此外,那里的答案归咎于在编译37.975期间发生的十进制到浮点 转换中的舍入。这里的正确答案应该说明这是 floating-point-to-decimal 转换的正常舍入行为,对于恰好介于两个十进制表示之间的值。 -
@Pascal:我现在明白了:接近投票。不,它不是重复的,IMO。
标签: c floating-point printf rounding