当前位置: 首页 > 知识库问答 >
问题:

VS 2012 printf()的舍入行为

凌善
2023-03-14
#include <stdio.h>
int main(int, char**) {
   printf("0.5 -> %.0f\n", 0.5);
   printf("1.5 -> %.0f\n", 1.5);
   printf("-0.5 -> %.0f\n", -0.5);
   printf("-1.5 -> %.0f\n", -1.5);
   printf("0.05 -> %.1f\n", 0.05);
   printf("0.15 -> %.1f\n", 0.15);
   printf("0.25 -> %.1f\n", 0.25);
   printf("-0.05 -> %.1f\n", -0.05);
   printf("-0.15 -> %.1f\n", -0.15);
   printf("-0.25 -> %.1f\n", -0.25);
   return 0;
}
 0.5 -> 1
 1.5 -> 2
 -0.5 -> -1
 -1.5 -> -2
 0.05 -> 0.1  
 0.15 -> 0.1  
 0.25 -> 0.3  
 -0.05 -> -0.1
 -0.15 -> -0.1
 -0.25 -> -0.3

我是不是误会了什么?我假设四舍五入到小数点后的任何一位都是一样的。

共有1个答案

公良鸿禧
2023-03-14

这是因为只有很少的数字可以精确地用浮点表示。

0.5可以是一个并数有理。同上0.25。

0.15不能是,最接近的可用双倍低于该值。因此你观察到的向下舍入。

 类似资料:
  • 问题内容: 我只是在重新阅读Python 3.0的新增功能,它指出: 函数的舍入策略和返回类型已更改。现在,精确的中途案例将舍入到最接近的偶数结果,而不是从零舍入。(例如,round(2.5)现在返回2而不是3。) 以及关于round的文档: 对于支持的内置类型,将值四舍五入为乘幂n的最接近10的倍数;如果两个倍数相等接近,则四舍五入取整为偶数选择 因此,在v2.7.3下: 如我所料 但是,现在在

  • 和Round的文档: 对于支持round()的内置类型,值被舍入到10的最接近倍数的幂减N;如果两个倍数相等接近,则向偶数选择四舍五入 因此,在V2.7.3下: null

  • 问题内容: 这是小代码来说明我所看到的 打印: 我要打印 我需要做什么? 问题答案: 在使用之前添加以下行: 查看其他舍入模式,看看哪种最适合您。 注意:此方法仅在JDK 1.6或更高版本中有效

  • 问题内容: 给定以下代码,我希望它返回“ float = 32000.0001”。但是,它返回“ float = 32000.0”。 我可以采取一些措施来防止/控制舍入吗?我要返回没有四舍五入的完整值。 问题答案: 浮点数只有24位精度,不足以容纳您的值中的位数。四舍五入不是由于解析,而是由于数字的大小。如果需要浮点数,则必须使用double;如果需要任意精度,则必须使用BigDecimal。

  • 问题内容: 在我的课程中,我被告知: 连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,如果和为浮点,则测试是不安全的。 指的是Java。 这是真的?我已经将比较语句与s和s一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗? 问题答案: 是真的。 这是如何在内存中以有限数量的位表示浮点值的固有限制。 例如,该程序显示“

  • 问题内容: 我想将双精度数四舍五入到一定数量的小数,总是四舍五入。 例 四舍五入到.00 => 1.5679999到1.56 四舍五入至.000 => 1.5679999至1.567 我想要一个Double而不是一个连接字符串 问题答案: 只需替换为!