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

标签 c++ floating-point double

我正在编写一个程序,我必须将 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/

相关文章:

java - 将二维 double 组转换为 BufferedImage

c++ - C++ header 中的编译器错误, "was not declared in this scope"

c++ - 我可以期望我从文字常量设置的浮点变量值在分配给其他变量后不变吗?

Python3.x : Format Float to 2 Digits, 限制为小数点后 3 位

c++ - 在 C++ 中添加两个 double

c# - 如何通过将double转换为int来切断结尾?

java - 重新审视 IEEE-754 double (64 位浮点)与长整型(64 位整数)

c++ - 为什么 nl_langinfo(CODESET) 与语言环境字符映射不同?

c++ - 在c文件中创建c++对象

C++ : DirectX Texture is Misaligned/Shifted