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

Java DecimalFormat舍入错误?

龙志勇
2023-03-14
  • 0.05返回0.0
  • 0.15返回0.2
  • 0.25返回0.2
  • 0.35返回0.4
  • 0.45返回0.4

为什么会出现这种情况?更重要的是,我如何才能得到正确的值(舍入0.25时为0.3,舍入0.45时为0.5)?

共有1个答案

陶飞鸿
2023-03-14

Javadoc声明:

DecimalFormat提供在RoundingMode中定义的舍入模式以进行格式设置。默认情况下,它使用roundingmode.half_even。

half_even所做的正是您所注意到的:当偶数正好在两个数中间时,它更喜欢舍入到最接近的偶数。(这是有用的,原因有很多,主要是因为它不会平均向上或向下偏置,倾向于平衡舍入误差。)

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

  • 问题内容: 我遇到了(我怀疑是)舍入错误。 我有一个字符串,我正尝试将其转换为双精度型。我已经可以使用函数将其拆分,并且可以很好地捕获基数和指数值。但是,一旦我尝试将它们适当地相乘,就会得到以下结果:。 这是我的相关代码: 那么,如何避免舍入错误?(我有多种方法可以解决此问题,但如果有可能,那么我想知道如何解决该问题) 谢谢。 问题答案: 您不需要拆分它,可以很好地处理这些数字。 看到?有用!

  • 问题内容: 我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少和的结果。在调查中,我注意到以下Python代码: 生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本: 而且我看不到发生这种舍入错误的

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

  • 问题内容: 参见以下代码: 当我在Firefox 3.5中看到控制台时,jsonParsed的值为: 即数字是四舍五入的。尝试了不同的值,结果相同(四舍五入)。 我也没有四舍五入规则。714341252076979136舍入为714341252076979200,而714341252076979135舍入为714341252076979100。 编辑: 请参阅下面的第一条评论。显然,这与JSON无

  • 问题内容: 我的BinvA矩阵的(1,1)条目得到一个非常奇怪的值,我 只是想将B矩阵求逆,并进行(B ^ -1)A乘法。 我知道,当我手动进行计算时,我的(1,1)应该为0,但我得到1.11022302e-16。我该如何解决?我知道浮点数不能完全准确地表示出来,但是为什么这会给我这么不准确的响应,而不是四舍五入,有什么办法可以使我更准确呢? 她是我的代码: 我的印刷声明: 问题答案: 计算逆时,