我正在编写一个程序,我必须将 double 四舍五入到小数点后第二位。我注意到 printf("%.2f", (double) 12.555) 返回 12.55。但是,printf("%.2f", (float) 12.555) 返回 12.56。谁能解释为什么会这样?
最佳答案
12.555 是一个无法用二进制 float 精确表示的数字。碰巧在您的系统上以 double 浮点表示的最接近 1.2555 的值略小于 1.2555,而以单精度浮点表示的最接近 1.2555 的值略大于 1.2555。
假设转换使用的舍入模式是舍入到最接近的(与偶数相关),这是 IEEE 754 标准中的默认值,那么所描述的输出是预期的。
关于c++ - 为什么 printf ("%.2f", (double) 12.555) 返回 12.55?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394596/