BigDecimal在乘法过程中未能设置8位精度

时间:2018-03-31 22:34:19

标签: java precision bigdecimal

我正在尝试将BigDecimal数字与8位数的精度相乘

这是我想要的

0.02749639

这是我的代码

double amount = 2120;
double BuyPrice = 0.00001297;
BigDecimal result=BigDecimal.valueOf(BuyPrice).multiply(BigDecimal.valueOf(amount)).setScale(8,RoundingMode.HALF_DOWN);
System.out.println(result);

在这里我做了什么

0.027496400

有人可以帮我解决吗?

1 个答案:

答案 0 :(得分:4)

0.0274964是正确的结果。也许在代码的其他部分,由于使用double

,您已经失去了精确度

使用BigDecimal.valueOf(double)时,如果声明double,则会遇到精度损失。要避免它,应该使用new BigDecimal(String)构造函数:

BigDecimal d1 = BigDecimal.valueOf(90.000000000000001d);
BigDecimal d2 = BigDecimal.valueOf(90.000000000000002d);
System.out.println(d1.equals(d2));

BigDecimal s1 = new BigDecimal("90.000000000000001");
BigDecimal s2 = new BigDecimal("90.000000000000002");
System.out.println(s1.equals(s2));

将打印

true
false