我正在尝试转换双-> 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);
}这正是我想要的。
发布于 2016-09-24 22:14:06
与BigDecimal类似的字符串是不可变的,因此只对BigDecimal对象调用setScale(...)就不会对同一个对象产生任何影响。对于要设置的标度,必须将结果重新赋值给BigDecimal变量。为此,我不使用for-each循环,而是使用For循环:
for (int i = 0; i < ret.length; i++) {
ret[i] = ret[i].setScale(2, RoundingMode.FLOOR);
}https://stackoverflow.com/questions/39681419
复制相似问题