为什么printf输出的圆形浮点数总是让人摸不着头脑?
- 内容介绍
- 文章标签
- 相关推荐
本文共计308个文字,预计阅读时间需要2分钟。
我尝试使用printf函数打印一些浮点数。例如:
cint main() { printf(%.1f, 76.75); return 0;}
输出结果为:76.8
我对这个结果有一些疑问。首先,为什么没有打印出76.7?其次,它是如何围绕这个数字的?除了现有的答案外,我还有其他问题。
我试图使用printf打印一些浮点数.例如:
int main() { printf("%.1f",76.75); return 0; }
输出:76.8
我对结果有一些疑问.
首先,为什么不打印76.7?
第二,它是如何围绕这个数字的呢?
除了现有的答案,请注意许多C编译器尝试遵循IEEE 754的浮点问题. IEEE 754建议根据当前舍入模式舍入从二进制浮点到十进制的转换.默认的舍入模式是“舍入到最近并且与偶数相关”.某些编译平台不考虑舍入模式,并且在从浮点到十进制的转换中始终根据默认的最近偶数模式进行舍入.由于76.75完全代表7675/100,它恰好在76.7和76.8之间.当应用“round to nearest-even”时,后一个数字被认为是“偶数”.这可能是您的编译平台选择生成此十进制表示形式作为浮点数76.75的十进制转换的原因.
本文共计308个文字,预计阅读时间需要2分钟。
我尝试使用printf函数打印一些浮点数。例如:
cint main() { printf(%.1f, 76.75); return 0;}
输出结果为:76.8
我对这个结果有一些疑问。首先,为什么没有打印出76.7?其次,它是如何围绕这个数字的?除了现有的答案外,我还有其他问题。
我试图使用printf打印一些浮点数.例如:
int main() { printf("%.1f",76.75); return 0; }
输出:76.8
我对结果有一些疑问.
首先,为什么不打印76.7?
第二,它是如何围绕这个数字的呢?
除了现有的答案,请注意许多C编译器尝试遵循IEEE 754的浮点问题. IEEE 754建议根据当前舍入模式舍入从二进制浮点到十进制的转换.默认的舍入模式是“舍入到最近并且与偶数相关”.某些编译平台不考虑舍入模式,并且在从浮点到十进制的转换中始终根据默认的最近偶数模式进行舍入.由于76.75完全代表7675/100,它恰好在76.7和76.8之间.当应用“round to nearest-even”时,后一个数字被认为是“偶数”.这可能是您的编译平台选择生成此十进制表示形式作为浮点数76.75的十进制转换的原因.

