意外的十进制结果

eva*_*van 3 java floating-point decimal

我运行以下代码,但没想到结果..

public class SampleDemo {
    public static void main(String args[]) {  
        System.out.println(10.00 - 9.10);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的o/p为0.9000000000000004

为什么会这样?

sgo*_*les 6

这是因为十进制值不能用float或double精确表示.

一个建议:避免浮动和双重需要确切答案.请改用BigDecimal,int或long


使用int:

public class SampleDemo {
    public static void main(String args[]) {  
        System.out.println(10 - 9);
    }
}

// Output : 1
Run Code Online (Sandbox Code Playgroud)

使用BigDecimal:

import java.math.BigDecimal;

public class SampleDemo {
  public static void main(String args[]) {
     System.out.println(new BigDecimal("10.00").subtract(new BigDecimal("9.10")));
                             }
                     }
// Output : 0.90
Run Code Online (Sandbox Code Playgroud)

  • 需要指出的是,如果您需要这种精度,请转到[BigDecimal](http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html),它会为您提供更多控制精度,规模,舍入政治等 (4认同)