This question already has answers here:
Formatting double to 2 decimals doesn't work
(4个答案)
6年前关闭。
我正在尝试将 double 值四舍五入为2个十进制数字,但是,并非在所有情况下都有效
简而言之,无论是否存在小数,即使需要填充额外的零,也始终保留最多2个小数的值。
任何帮助表示赞赏!
其次,当您将实数打印或转换为字符串时,可以考虑使用System.out.printf或String.format。在您的情况下,使用格式“%.2f”可以解决问题。
(4个答案)
6年前关闭。
我正在尝试将 double 值四舍五入为2个十进制数字,但是,并非在所有情况下都有效
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(places, RoundingMode.HALF_UP);
return bd.doubleValue();
}
public static void main(String[] args) {
System.out.println(round(25.0,2)); //25.0 - expected 25.00
System.out.println(round(25.00d,2)); //25.0 - expected 25.00
System.out.println(round(25,2)); //25.0 - expected 25.00
System.out.println(round(25.666,2)); //25.67
}
简而言之,无论是否存在小数,即使需要填充额外的零,也始终保留最多2个小数的值。
任何帮助表示赞赏!
最佳答案
您的代码中有两点可以改进。
首先,将double转换为BigDecimal以便将其舍入是非常低效的方法。您应该改用Math.round:
double value = 1.125879D;
double valueRounded = Math.round(value * 100D) / 100D;
其次,当您将实数打印或转换为字符串时,可以考虑使用System.out.printf或String.format。在您的情况下,使用格式“%.2f”可以解决问题。
System.out.printf("%.2f", valueRounded);