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

Java中的双精度模数

佴飞驰
2023-03-14
问题内容

使用double时,如何使用模数运算符处理Java的怪异行为?

例如,你所期望的结果3.9 - (3.9 % 0.1)3.9(事实上,谷歌说,我不是要疯了),但是当我在Java中,我得到运行它3.8000000000000003

我了解这是Java存储和处理方式加倍的结果,但是有没有解决的方法?


问题答案:

如果需要精确的结果,请使用精确的类型:

    double val = 3.9 - (3.9 % 0.1);
    System.out.println(val); // 3.8000000000000003

    BigDecimal x = new BigDecimal( "3.9" );
    BigDecimal bdVal = x.subtract( x.remainder( new BigDecimal( "0.1" ) ) );
    System.out.println(bdVal); // 3.9

为什么是3.8000 …
003?因为Java使用FPU来计算结果。3.9不可能以IEEE双精度表示法精确存储,因此它存储3.89999…。3.8999%0.01给出0.09999
…因此结果比3.8大一点。



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

  • 问题内容: 我正在编写一个简单的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浮点”是什么意思?

  • 问题内容: 我想知道为什么会出现此错误。(这是Eclipse调试的显示日志) 我不明白为什么我没有得到2.97! 问题答案: 如果需要,您应该已经习惯了。 s以分数形式存储在 二进制 而不是十进制中。因此,例如,仅存储为。 并且不能精确地表示为二进制分数,因此会有一些舍入误差。 您可能还会发现本文很有帮助。

  • 问题内容: 是一个字符串,而%d是一个小数,我想…但是放入时 ..引发异常,告诉我!= lang.double。有想法吗? 问题答案: 是供整数使用的,它同时适用于和类型:

  • 问题内容: 我该如何克服Java android中双精度乘法的精度问题?请注意,我正在将字符串值转换为double值。 例如:当我将两个double值相乘时: 我得到以下结果:0.8999999999999999 我得到的一些结果是。 0.6 * 3 = 1.7999999999999998; 0.2 * 0.2 = 0.04000000000000001; 等等 除了上述结果外,我想得到以下结果