Gist of my full code, 31 lines
我试图转换双打 - > BigDecimal然后在存储在数组内的每个BigDecimal对象上调用setScale方法。
// convert double variables to BigDecimal inside of new BigDecimal array
BigDecimal[] ret = new BigDecimal[]{
new BigDecimal(area),
new BigDecimal(theta),
new BigDecimal(x),
new BigDecimal(y)
};
// setScale on each object
for (BigDecimal val: ret) {
val.setScale(2, RoundingMode.FLOOR);
}
但是当我打印出来时,很清楚,当我稍后打印出来时,没有在任何对象上调用setScale函数。
数组中的对象是否未在第二个for循环中被突变或保存?
更新&使用答案建议进行调整:
根据Hovercraft的回答,我在这里重写了我的代码的最后一部分:
double[] vals = new double[]{area, theta, x, y};
BigDecimal[] ret = new BigDecimal[vals.length];
for (int i = 0; i < vals.length; i++) {
ret[i] = new BigDecimal(vals[i]).setScale(2, RoundingMode.FLOOR);
}
这正是我想要的。
答案 0 :(得分:2)
setScale(...)
就不会对同一个对象产生任何影响。对于要设置的比例,您必须将结果重新分配给BigDecimal变量。为此,我不会使用for-each循环,而是使用for循环:
for (int i = 0; i < ret.length; i++) {
ret[i] = ret[i].setScale(2, RoundingMode.FLOOR);
}