当前位置: 首页 > 面试题库 >

Java双精度和麻烦

卜飞鸣
2023-03-14
问题内容

我想知道为什么会出现此错误。(这是Eclipse调试的显示日志)

var
     (double) 2.8
tot.getIva()
     (java.lang.Double) 0.17
var+tot.get()
     (double) 2.9699999999999998

我不明白为什么我没有得到2.97!


问题答案:

如果需要2.97,您应该已经习惯了BigDecimal

doubles以分数形式存储在 二进制 而不是十进制中。因此3.75,例如,仅存储为2^1 + 2^0 + 2^(-1) + 2^(-2)

2.8并且0.17不能精确地表示为二进制分数,因此会有一些舍入误差。

您可能还会发现本文很有帮助。



 类似资料:
  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 我正在制作一个AndroidJava程序,它从用户那里获得双倍的值。如果我在电脑上运行这个程序,它会很好地工作,因为我的电脑的语言环境,EN_UK。但是当我在手机上用FI_FI语言环境运行它时,它就不起作用了。我知道原因:在英国,人们用点作为十进制分隔符,但是在芬兰,十进制分隔符是逗号。 当我使用逗号时,它说。 我怎样才能同时使用逗号和圆点呢?

  • 问题内容: 我正在编写一个简单的Java程序。我需要从输入中获取一个字符串并将其分为两部分:1-double 2-string。然后,我需要对double进行简单的计算,并将结果发送到具有特定精度的输出(4)。它工作正常,但是当输入为0时出现问题,则不能正常工作。 例如,对于这些输入,输出将是: 1公斤 输出:2.2046 3.1公斤 输出:6.8343 但是当输入为0时,输出应为0.0000,但

  • 什么是“精度”?使用float和double时,单和双有什么区别?“单精度32位IEEE 754浮点”“双精度64位IEEE 754浮点”是什么意思?

  • 问题内容: 使用double时,如何使用模数运算符处理Java的怪异行为? 例如,你所期望的结果是(事实上,谷歌说,我不是要疯了),但是当我在Java中,我得到运行它。 我了解这是Java存储和处理方式加倍的结果,但是有没有解决的方法? 问题答案: 如果需要精确的结果,请使用精确的类型: 为什么是3.8000 … 003?因为Java使用FPU来计算结果。3.9不可能以IEEE双精度表示法精确存储

  • 我知道,由于浮点数/双浮点数的性质,不应该将它们用于精确的重要计算。然而,由于对类似问题的混合答案,我对它们的局限性有点困惑,无论浮点数和双倍数是否总是不准确,而不管有效数字是多少,或者只不准确到第16位。 我用Java运行了几个示例, 我找不到另一个答案的链接,该答案指出,1.98和2.02等值将四舍五入为2.0,因此会产生误差,但测试表明,这些值打印正确。因此,我的第一个问题是,浮点/双精度值