Mar*_*ark 32 java math bigdecimal
执行以下代码:
new BigDecimal(0.06 * 3).toString()
Run Code Online (Sandbox Code Playgroud)
返回0.179999999999999993338661852249060757458209991455078125而不是0.18.
执行
new BigDecimal(0.06).multiply(new BigDecimal(3)).toString()
Run Code Online (Sandbox Code Playgroud)
返回相同的结果.
这怎么可能?
Jon*_*eet 50
你没有使用两个数字相乘BigDecimal.您将它们double与算术相乘,并将结果传递给BigDecimal构造函数.
你要:
new BigDecimal("0.06").multiply(new BigDecimal("3")).toString()
Run Code Online (Sandbox Code Playgroud)
请注意,您确实需要字符串中的值 - 否则您使用的double值为0.06,这不是0.06 ...您在开始之前就丢失了信息.(你真的不需要3的字符串形式,但为了保持一致性,我这样做了.)
例如:
System.out.println(new BigDecimal(0.06));
Run Code Online (Sandbox Code Playgroud)
版画
0.059999999999999997779553950749686919152736663818359375
Run Code Online (Sandbox Code Playgroud)