Java: BigDecimal 四舍五入百万数
Java: BigDecimal round up for million number
我有一个计算 17780.00 x 115.00 的方法,结果应该是 2044700.00,但是,该方法计算出的结果是 2045000.00(似乎是四舍五入的整数)。此方法还将处理带小数的数字,例如。 0.97 x 0.5。代码如下所示:
public Double multiplyNumber(Double d1, Double d2) {
return new BigDecimal(d1).multiply(
new BigDecimal(d2),
new MathContext(4, RoundingMode.HALF_UP)).doubleValue();
}
请指教如何让代码计算出正确的结果。谢谢!
四舍五入只处理小数点后的数字。向左舍入、除法、舍入、乘法:
public Double multiplyNumber(Double d1, Double d2) {
return new BigDecimal(d1)
.multiply(new BigDecimal(d2))
.divide(BigDecimal.TEN.pow(3), new MathContext(0, RoundingMode.HALF_UP))
.multiply(BigDecimal.TEN.pow(3))
.doubleValue();
}
顺便说一句,这也会产生你想要的值:
public Double multiplyNumber(Double d1, Double d2) {
return d1 * d2;
}
你试试运行这个。
public class Test {
public static void main(String... strings) {
System.out.println("result "+multiplyNumber(17780.00, 115.00) );
}
public static Double multiplyNumber(Double d1, Double d2) {
return new BigDecimal(d1).multiply(
new BigDecimal(d2)).setScale(4, RoundingMode.HALF_UP).doubleValue();
}
}
改用下面的 return 语句:
return new BigDecimal(d1).multiply(new BigDecimal(d2)).round(new MathContext(4, RoundingMode.HALF_UP)).doubleValue();
我有一个计算 17780.00 x 115.00 的方法,结果应该是 2044700.00,但是,该方法计算出的结果是 2045000.00(似乎是四舍五入的整数)。此方法还将处理带小数的数字,例如。 0.97 x 0.5。代码如下所示:
public Double multiplyNumber(Double d1, Double d2) {
return new BigDecimal(d1).multiply(
new BigDecimal(d2),
new MathContext(4, RoundingMode.HALF_UP)).doubleValue();
}
请指教如何让代码计算出正确的结果。谢谢!
四舍五入只处理小数点后的数字。向左舍入、除法、舍入、乘法:
public Double multiplyNumber(Double d1, Double d2) {
return new BigDecimal(d1)
.multiply(new BigDecimal(d2))
.divide(BigDecimal.TEN.pow(3), new MathContext(0, RoundingMode.HALF_UP))
.multiply(BigDecimal.TEN.pow(3))
.doubleValue();
}
顺便说一句,这也会产生你想要的值:
public Double multiplyNumber(Double d1, Double d2) {
return d1 * d2;
}
你试试运行这个。
public class Test {
public static void main(String... strings) {
System.out.println("result "+multiplyNumber(17780.00, 115.00) );
}
public static Double multiplyNumber(Double d1, Double d2) {
return new BigDecimal(d1).multiply(
new BigDecimal(d2)).setScale(4, RoundingMode.HALF_UP).doubleValue();
}
}
改用下面的 return 语句:
return new BigDecimal(d1).multiply(new BigDecimal(d2)).round(new MathContext(4, RoundingMode.HALF_UP)).doubleValue();