即使是双倍的一半

时间:2013-06-20 18:43:44

标签: java rounding

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

感谢您的反馈。

3 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:7)

@ 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

答案 2 :(得分: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);
    }  
}