5

如果可能,我需要四舍五入到最接近的 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

感谢您的任何反馈。

4

3 回答 3

12

与其尝试四舍五入到最接近的 0.5,不如将它加倍,四舍五入到最接近的 int,然后除以 2。

这样,2.49 变成 4.98,四舍五入到 5,变成 2.5。
2.24 变为 4.48,四舍五入为 4,变为 2。

于 2013-06-20T18:48:31.760 回答
8

如果您想四舍五入到其他东西,@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
于 2013-06-20T19:04:17.137 回答
0
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);
    }  
}  
于 2013-06-20T18:53:28.917 回答