所以我需要将143.203030之类的双打更改为143.20向上或向下舍入第二位数字(如钱)我的计划是将双数转换成数组然后如果小数点后的第三个数字是5或更大元素将比它更大。我如何访问double的每个int,以及如何将我的int数组转换为双精度数。现在......这显然是一种可怕而无效的方式,这将是一个更好的主意。我会花时间编写代码,但我想解释它并要求更好的方法是同样的事情。好吧,实际上我无法编码,因为我不知道访问双重的每个部分。
答案 0 :(得分:2)
更好的想法,特别是如果你正在使用钱,就是使用BigDecimal
类。它支持各种舍入模式,满足最常见的财务和工程要求。
为了满足您的直接需求,您可以按如下方式使用BigDecimal
(尽管最好从您的计划中删除double
类型并始终使用BigDecimal
):
String[] round(double[] arr) {
String[] r = new String[arr.length];
for (int idx = 0; idx < arr.length; ++idx) {
r[idx] = BigDecimal.valueOf(arr[idx]).setScale(2, RoundingMode.HALF_UP).toString();
}
}
答案 1 :(得分:1)
试试这个:
public static roundHundredth(double d) {
return (double)((int)(d*100)+.5)/100;
}
答案 2 :(得分:0)
我同意你不应该使用double
存储货币价值(虽然可能适用于较小的金额)。进行这种舍入的一般方法是
double rounded = Math.round(d * 100) / 100.0;