Java 为什么我的双数最后会得到数字

标签 java double

嗯,很难解释,但就是这样。 在java代码中,我使用了一个双数,但是这个数字最后得到了非常小的数字,这是我不想要的。 也许我需要用更好的方式来获得剩余的。

代码如下:

public class MyClass {
  public static void main(String args[]) {
            String vRetour = "";
    Boolean valeurTrouve = false;
           double chiffre = .08 ;
    double valeurTravailDouble = 0;
    long vIntegerPart = 0;

    while (! valeurTrouve) {
        for (int i = 0; i<101;i++) {
            valeurTravailDouble = chiffre * 8;
            vIntegerPart = (long) valeurTravailDouble;

            vRetour = vRetour + vIntegerPart;
            if ((valeurTravailDouble - vIntegerPart) == 0) {
                valeurTrouve = true;
                break;
            }
            chiffre = (valeurTravailDouble - vIntegerPart);
                    System.out.println(i + " = " + chiffre);
        }
    }
}

}

问题是在最后,我有剩余的不需要的数字,如第 1 行,我在最后有一个 1。在第 2 行之后,我有一个 9。但是这个数字的增加和增加给我带来了第 17 行的不好,因为他增加了我的数字的一部分。

  • 0 = 0.64
  • 1 = 0.1200000000000001
  • 2 = 0.9600000000000009
  • 3 = 0.6800000000000068
  • 4 = 0.44000000000005457
  • 5 = 0.5200000000004366
  • 6 = 0.16000000000349246
  • 7 = 0.2800000000279397
  • 8 = 0.24000000022351742
  • 9 = 0.9200000017881393
  • 10 = 0.36000001430511475
  • 11 = 0.880000114440918
  • 12 = 0.04000091552734375
  • 13 = 0.32000732421875
  • 14 = 0.56005859375
  • 15 = 0.48046875
  • 16 = 0.84375
  • 17 = 0.75

出了什么问题,我如何处理 double 而不保留数字结尾?

最佳答案

众所周知,Java 无法正确“添加”。您应该尝试在代码中尽早对数字进行四舍五入并限制小数空格,以防止出现错误。在完成计算之前,使用 import java.math.BigDecimal 进行舍入。

有关如何舍入的信息,请查看另一篇文章: Java BigDecimal: Round to the nearest whole value

关于Java 为什么我的双数最后会得到数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51896395/

相关文章:

java - 在 Java 中解析日期?

java - 无需 ?ln=xxx 从 JS 访问 JSF 资源库

java - Flyway DB迁移-如何访问应用服务(Spring配置)

iphone - 比较 Objective-C 中的 float 和 double 数据类型

java spring资源文件夹: FileNotFoundException

java - 如何从 application.yml 映射时间属性?

所有 Double 的 grails 值转换器

c - Double 在递归中返回 0,但在 int 时工作正常

c++ - 防止 "Float-point invalid operation"异常?

c - 浮点比较