问题描述
我正在使用这个功能:
public static Double arrondi(Double number) {
DecimalFormat df = new DecimalFormat("0.00");
df.setRoundingMode(RoundingMode.UP);
String localProportionAfterRound = df.format(number).replace(",",".");
return Double.parseDouble(localProportionAfterRound);
}
如果第 3 个十进制数大于或等于 5,我想对数字进行四舍五入
有一些我想要的输出示例:
arrondi(1941.8849999999998) ==> 1941.89 (1941.885 ==> 1941.89 **Correct**)
arrondi(647.259) ==> 647.26 **Correct**
arrondi(145.83333333333334) ==> 145.83 ( **Incorrect**,I got 145.84)
有没有办法做到这一点?我的函数应该总是接收一个双精度值并返回一个双精度值。
谢谢
解决方法
它可以通过这里实现,其中位置是您喜欢的小数位数。 在您的情况下,您将调用位置等于 2 的函数
public static double round(double value,int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = BigDecimal.valueOf(value);
bd = bd.setScale(places,RoundingMode.HALF_UP);
return bd.doubleValue();
}