java Math.义齿

2118 ワード

MathUtil-四捨五入
Javaのfloatとdoubleの数値のため,計算を行う際にデータの精度を保証することはできず,四捨五入の必要性が切実である.もちろん、longで100で割ってもいいですが、面倒です.あるいはBigDecimalを採用するのも比較的に良い選択ですが、その可変な特性は計算中に大量のゴミオブジェクトを成長させます.プログラムに計算が必要で、精度を維持したい場合は、1つの四捨五入で処理しましょう.
 
これは個人が作成した数値計算後の四捨五入のための小さなプログラムです.
 
public class MathUtil   
{   
  public static int devide(int x, int y)   
  {   
    float f = x;   
    return Math.round(f / y);   
  }   
  
  public static long devide(long x, long y)   
  {   
    double d = x;   
    return Math.round(d / y);   
  }   
  
  public static float round(float f, int bit)   
  {   
    float p = (float)pow(bit);   
    return (Math.round(f * p) / p);   
  }   
  
  public static double round(double d, int bit)   
  {   
    double p = pow(bit);   
    return (Math.round(d * p) / p);   
  }   
  
  private static long pow(int bit)   
  {   
    return Math.round(Math.pow(10.0D, bit));   
  }   
}  

public class MathTest{public static void main(String[]args){System.out.println("小数点以下1位=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(「小数点以下1位<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(「小数点以下1位>5」)            System.out.println("正数:Math.round(11.68)="+Math.round(11.68));            System.out.println("負数:Math.round(-11.68)="+Math.round(-11.68));}運転結果:1、小数点以下1位=5 2、正数:Math.round(11.5)=12 3、負数:Math.round(-11.5)=-114、5、小数点以下第1位<5 6、正数:Math.round(11.46)=11 7、負数:Math.round(-11.46)=-118、9、小数点以下第1位>5 10、正数:Math.round(11.68)=12 11、負数:Math.round(-11.68)=-12上記の例の運転結果によれば、1、パラメータの小数点後1位<5、演算結果がパラメータ整数部分であることをより記憶しやすいようにまとめることもできる.2、パラメータの小数点以下第一位>5、演算結果はパラメータ整数部分絶対値+1、符号(すなわち正負)は変わらない.3、パラメータの小数点以下第一位=5、正数演算結果は整数部分+1、負数演算結果は整数部分である.
 
終結:5全加算より大きく、5正数加算に等しく、5全加算より小さい.