我正在尝试使用BigDecimal它,但它总是返回0.我使用时为什么会这样double?
public static void main(String[] args) {
double a = 3376.88;
BigDecimal b = new BigDecimal(a);
System.out.println(a-a/1.05);
System.out.println(b.subtract(b).divide(new BigDecimal(1.05)).doubleValue());
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
azu*_*rog 12
您没有执行相同的操作.
当您执行双操作时,正常的Java操作顺序正在应用:
a-a/1.05
= a - (a/1.05)
Run Code Online (Sandbox Code Playgroud)
但是当您运行方法时BigDecimal,操作将按您调用它们的顺序进行评估,因此
b.subtract(b).divide(new BigDecimal(1.05))
Run Code Online (Sandbox Code Playgroud)
相当于
(b - b) / 1.05
= 0 / 1.05
= 0
Run Code Online (Sandbox Code Playgroud)
链接方法调用时BigDecimal,操作顺序不会像在数学中那样保留,也不像doubleJava中的运算符那样保留.方法将按顺序执行.这意味着b.subtract(b)首先发生,导致BigDecimal 0.
要获得等效结果,请通过将divide方法的结果发送到方法来自行强制执行操作顺序subtract.
System.out.println(b.subtract( b.divide(new BigDecimal(1.05)) ).doubleValue());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |