MathUtil - 四舍五入

来源:互联网 发布:mac 关闭键盘感应光线 编辑:程序博客网 时间:2024/04/29 09:11


由于Java的float和double数值,在进行计算时,无法保证数据的精度,四舍五入的需要就迫切需要。 当然,用long再除以100也不错,但比较麻烦。 或采用BigDecimal也将会是一个比较好的选择,但其不可变的特性又使得计算中长生大量的垃圾对象。如果程序中需要进行计算,有想保持精度,那就使用一个四舍五入来处理吧。

 

这是一个个人编写的用于数值计算后四舍五入的小程序。

 

[java] view plaincopy
  1. public class MathUtil     
  2. {     
  3.   public static int devide(int x, int y)     
  4.   {     
  5.     float f = x;     
  6.     return Math.round(f / y);     
  7.   }     
  8.     
  9.   public static long devide(long x, long y)     
  10.   {     
  11.     double d = x;     
  12.     return Math.round(d / y);     
  13.   }     
  14.     
  15.   public static float round(float f, int bit)     
  16.   {     
  17.     float p = (float)pow(bit);     
  18.     return (Math.round(f * p) / p);     
  19.   }     
  20.     
  21.   public static double round(double d, int bit)     
  22.   {     
  23.     double p = pow(bit);     
  24.     return (Math.round(d * p) / p);     
  25.   }     
  26.     
  27.   private static long pow(int bit)     
  28.   {     
  29.     return Math.round(Math.pow(10.0D, bit));     
  30.   }     
  31. }    

public class MathTest {   
    public static void main(String[] args) {   
        System.out.println("小数点后第一位=5");   
        System.out.println("正数:Math.round(11.5)=" + Math.round(11.5));   
        System.out.println("负数:Math.round(-11.5)=" + Math.round(-11.5));   
        System.out.println();   
  
        System.out.println("小数点后第一位<5");   
        System.out.println("正数:Math.round(11.46)=" + Math.round(11.46));   
        System.out.println("负数:Math.round(-11.46)=" + Math.round(-11.46));   
        System.out.println();   
  
        System.out.println("小数点后第一位>5");   
        System.out.println("正数:Math.round(11.68)=" + Math.round(11.68));   
        System.out.println("负数:Math.round(-11.68)=" + Math.round(-11.68));   
    }   
 

运行结果:

1、小数点后第一位=5
2、正数:Math.round(11.5)=12
3、负数:Math.round(-11.5)=-11
4、
5、小数点后第一位<5
6、正数:Math.round(11.46)=11
7、负数:Math.round(-11.46)=-11
8、
9、小数点后第一位>5
10、正数:Math.round(11.68)=12
11、负数:Math.round(-11.68)=-12

根据上面例子的运行结果,我们还可以按照如下方式总结,或许更加容易记忆:

1、参数的小数点后第一位<5,运算结果为参数整数部分。
2、参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
3、参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。

 

终结:大于五全部加,等于五正数加,小于五全不加。


原创粉丝点击