Round half even for double

前端 未结 3 1748
耶瑟儿~
耶瑟儿~ 2020-12-18 08:03

I need to round to nearest 0.5 if possible.

10.4999 = 10.5

Here is quick code:

import java.text.DecimalFormat;
import java.math.RoundingMode;         


        
相关标签:
3条回答
  • 2020-12-18 08:24

    Rather than try rounding to the nearest 0.5, double it, round to the nearest int, then divide by two.

    This way, 2.49 becomes 4.98, rounds to 5, becomes 2.5.
    2.24 becomes 4.48, rounds to 4, becomes 2.

    0 讨论(0)
  • 2020-12-18 08:34
    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);
        }  
    }  
    
    0 讨论(0)
  • 2020-12-18 08:47

    A more general solution to @RobWatt's answer in case you ever want to round to something else:

    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
    
    0 讨论(0)
提交回复
热议问题