为什么printf("%.2f",(double)12.555)返回12.55?

goo*_*s17 4 c++ floating-point double

我正在编写一个程序,我不得不将其加倍到小数点后第二位.我注意到 printf("%.2f",(double)12.555)返回12.55.但是,printf("%.2f",(float)12.555)返回12.56.谁能解释为什么会这样?

eer*_*ika 6

12.555是一个在二进制浮点中无法精确表示的数字.碰巧的是,在系统上以双精度浮点表示的最接近1.2555的值略小于1.2555,并且在单精度浮点中可表示的最接近1.2555的值略大于1.2555.

假设转换使用的舍入模式是舍入到最接近的(与偶数相关),这是IEEE 754标准中的默认值,则可以预期所描述的输出.