这是我第一次使用BigDecimal而且我遇到了一些麻烦。
这是我的代码:
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
BigDecimal pi = new BigDecimal(4);
boolean plus = false;
for (int i = 3; i < 1000000; i += 2) {
if (plus) {
pi.add(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
} else {
pi.subtract(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
}
plus = !plus;
}
System.out.println(pi);
}
}
为什么它不像它应该那样计算PI,而是它给我和4的答案?
答案 0 :(得分:3)
你永远不会改变pi。请记住,BigDecimals是不可变的,你永远不会改变你的,即你永远不会将它分配给一个新值,所以你必须有一个地方
pi = ...
在你的if / else里面是个好地方。
if (plus) {
pi = pi.add(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
} else {
pi = pi.subtract(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
}
的第一行
不可变,任意精度的有符号十进制数。
我也会将2的比例改为更好的状态。