为什么printf圆形浮点数?

我试图使用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之间。 当应用“舍入到最接近均匀”时,后一个数字被认为是“偶数”。 这可能是您的编译平台选择生成此十进制表示forms作为浮点数76.75十进制转换的原因。

C99§7.19.6.1fprintf函数

fF

表示浮点数的double参数在样式[−]ddd.ddd转换为十进制表示法,其中小数点字符后面的位数等于精度规范。 如果精度丢失,则取6; 如果精度为零且未指定#flag,则不显示小数点字符。 如果出现小数点字符,则在其前面至少出现一个数字。 该值四舍五入到适当的位数。

首先,他为什么不打印76.7?

因为语言规范说低位数字将被舍入。

他如何舍入这个数字? (一些代码会有所帮助)

这与实现的实现有所不同。 根据文件 ,

低位数字应以实现定义的方式舍入(强调添加)。