相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

BigDecimal来自Double不正确的值?

我试图从字符串中创建一个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)

有任何想法吗?

java double bigdecimal

5
推荐指数
1
解决办法
3031
查看次数

new BigDecimal(double)vs new BigDecimal(String)

何时BigDecimal使用输入doubleBigDecimal输入String不同的结果似乎出现.

BigDecimal a = new BigDecimal(0.333333333);
BigDecimal b = new BigDecimal(0.666666666);

BigDecimal c = new BigDecimal("0.333333333");
BigDecimal d = new BigDecimal("0.666666666");

BigDecimal x = a.multiply(b);
BigDecimal y = c.multiply(d);

System.out.println(x);
System.out.println(y);
Run Code Online (Sandbox Code Playgroud)

x输出为

0.222222221777777790569747304508155316795087227497352441864147715340493949298661391367204487323760986328125
Run Code Online (Sandbox Code Playgroud)

而你是

0.222222221777777778
Run Code Online (Sandbox Code Playgroud)

我错误地说这是因为双重不精确?但既然这是一个BigDecimal,不应该是一样的吗?

java bigdecimal double-precision

5
推荐指数
3
解决办法
3872
查看次数

BigDecimal乘法

我尝试将两个BigDecimal值乘以multiply如下方法,

BigDecimal dur = BigDecimal.valueOf(60/1.1);
BigDecimal bal = BigDecimal.valueOf(1.1);

BigDecimal ans  = dur.multiply(bal);

System.out.println("Ans:"+ans);
Run Code Online (Sandbox Code Playgroud)

我除了ans之外60.但我得到了,

Ans:59.999999999999994
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我们如何解决它.

java bigdecimal

4
推荐指数
2
解决办法
2107
查看次数