Float和BigDecimal精度差异

5 java floating-point bigdecimal

public static void main(String[] args) {
    // TODO Auto-generated method stub
    BigDecimal foo,foo1;
    foo=BigDecimal.valueOf(3.1);
    foo1=BigDecimal.valueOf(3.1f);

    System.out.println(foo);
    System.out.println(foo1);

}
Run Code Online (Sandbox Code Playgroud)

结果:
3.1
3.0999999046325684

为什么他们的结果不同?我使用的是JDK1.7.0_03

dac*_*cwe 5

3.1定义了一个doublewhile3.1f定义了一个float。您看到的是float表示该值的问题(浮点数“仅”使用 32 位和双 64 位)。

如果你想定义一个3.1完全BigDecimal使用的String构造函数:

BigDecimal foo = new BigDecimal("3.1");
System.out.println(foo);
Run Code Online (Sandbox Code Playgroud)

输出:

3.1
Run Code Online (Sandbox Code Playgroud)

  • OP,这些不是错误。请阅读其他人在您的问题下方提出的建议。对这些问题的认识是编程 101。 (3认同)