即使是双倍的一半

如果可能的话我需要舍入到最接近的0.5。

10.4999 = 10.5

这是快速代码:

import java.text.DecimalFormat; import java.math.RoundingMode; public class DecimalFormat { public static void main(String[] args) { DecimalFormat dFormat = new DecimalFormat("#.0"); dFormat.setRoundingMode(RoundingMode.HALF_EVEN); final double test = 10.4999; System.out.println("Format: " + dFormat.format(test)); } } 

这不起作用,因为6.10000 …轮到6.1等…需要它舍入到6.0

感谢您的任何反馈。

而不是尝试舍入到最接近的0.5,加倍,舍入到最近的int,然后除以2。

这样,2.49变为4.98,变为5,变为2.5。
2.24变为4.48,轮到4变为2。

@ RobWatt答案的更通用的解决方案,以防您想要回合其他内容:

 private static double roundTo(double v, double r) { return Math.round(v / r) * r; } System.out.println(roundTo(6.1, 0.5)); // 6.0 System.out.println(roundTo(10.4999, 0.5)); // 10.5 System.out.println(roundTo(1.33, 0.25)); // 1.25 System.out.println(roundTo(1.44, 0.125)); // 1.5 
 public class DecimalFormat { public static void main(String[] args) { double test = 10.4999; double round; int i = (int) test; double fraction = test - i; if (fraction < 0.25) { round = (double) i; } else if (fraction < 0.75) { round = (double) (i + 0.5); } else { round = (double) (i + 1); } System.out.println("Format: " + round); } }