nam*_*olk 0 java rounding bigdecimal
为什么我的卖出价是184.84?为什么它在BigDecimal.ROUND_UP中表现得像这样.我查看了BigDecimal.ROUND_HALF_EVEN.它工作正常.但我想知道它为什么会这样.
for(int i = 0; i < 50; i++){
double sellrate = 184.83;
BigDecimal sellRate = new BigDecimal(sellrate);
sellRate = sellRate.setScale(2,BigDecimal.ROUND_UP);
System.out.println("sellRate : "+sellRate);
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么:
double sellrate = 184.83;
BigDecimal sellRate = new BigDecimal(sellrate);
System.out.println("sellRate: " + sellRate);
Run Code Online (Sandbox Code Playgroud)
版画
sellRate: 184.830000000000012505552149377763271331787109375
Run Code Online (Sandbox Code Playgroud)
这在BigDecimal JavaDoc中解释:
这个构造函数的结果可能有点不可预测.有人可能会假设在Java中编写新的BigDecimal(0.1)会创建一个BigDecimal,它恰好等于0.1(未缩放值为1,标度为1),但它实际上等于0.1000000000000000055511151231257827021181583404541015625.这是因为0.1不能精确地表示为double(或者,就此而言,作为任何有限长度的二进制分数).因此,传递给构造函数的值并不完全等于0.1,尽管有外观.
使用String构造函数
BigDecimal sellRate = new BigDecimal("184.83");
Run Code Online (Sandbox Code Playgroud)
如果你想得到你的确切价值BigDecimal.