BigDecimal来自Double不正确的值?

Die*_*ego 5 java double bigdecimal

我试图从字符串中创建一个BigDecimal.不要问我为什么,我只是需要它!这是我的代码:

Double theDouble = new Double(".3");
System.out.println("The Double: " + theDouble.toString());
BigDecimal theBigDecimal = new BigDecimal(theDouble);
System.out.println("The Big: " + theBigDecimal.toString());
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出?

The Double: 0.3
The Big: 0.299999999999999988897769753748434595763683319091796875
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jim*_*son 12

创建double时,无法准确表示值0.3.您可以从没有中间双精度的字符串创建BigDecimal,如

new BigDecimal("0.3")
Run Code Online (Sandbox Code Playgroud)

浮点数表示为二进制分数和指数.因此,有一些数字无法准确表示.在基数10中存在类似的问题,其数字如1/3,即0.333333333 .....任何1/3的十进制表示都是不精确的.这发生在二进制的一组不同分数中,而0.3是二进制中不精确的集合之一.

  • @Diego:如果不是SO上最常见的问题,至少在前五名中是这样.但是,需要一点时间才能理解.阅读[每个计算机科学家应该知道的关于浮点算术的内容](http://docs.sun.com/source/806-3568/ncg_goldberg.html) (2认同)