前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
java.math.BigDecimal。BigDecimal一共有4個夠造方法,讓我先來看看其中的兩種用法:
第一種:BigDecimal(double val)
Translates a double into a BigDecimal.
第二種:BigDecimal(String val)
Translates the String repre sentation of a BigDecimal into a BigDecimal.
使用BigDecimal要用String來夠造,要做一個加法運算,需要先將兩個浮點數轉為String,然后夠造成BigDecimal,在其中一個上調用add方法,傳入另一個作為參數,然后把運算的結果(BigDecimal)再轉換為浮點數。
public static double add(double v1,double v2)
public static double sub(double v1,double v2)
public static double mul(double v1,double v2)
public static double div(double v1,double v2)
public static double div(double v1,double v2,int scale)public static double round(double v,int scale)
?
import?java.math.BigDecimal; ??/**??
*?由于Java的簡單類型不能夠精確的對浮點數進行運算,這個工具類提供精??
*?確的浮點數運算,包括加減乘除和四舍五入。??
*/??public?class?Arith{?//默認除法運算精度???private?static?final?int?DEF_DIV_SCALE?=?10;?//這個類不能實例化???private?Arith(){ ??
} ?/**??
*?提供精確的加法運算。??
*?@param?v1?被加數??
*?@param?v2?加數??
*?@return?兩個參數的和??
*/??
public?static?double?add(double?v1,double?v2){ ??BigDecimal?b1?=?new?BigDecimal(Double.toString(v1)); ??BigDecimal?b2?=?new?BigDecimal(Double.toString(v2)); ??return?b1.add(b2).doubleValue(); ??
} /**??
*?提供精確的減法運算。??
*?@param?v1?被減數??
*?@param?v2?減數??
*?@return?兩個參數的差??
*/??
public?static?double?sub(double?v1,double?v2){ ??BigDecimal?b1?=?new?BigDecimal(Double.toString(v1)); ??BigDecimal?b2?=?new?BigDecimal(Double.toString(v2)); ??return?b1.subtract(b2).doubleValue(); ??
} ?/**??
*?提供精確的乘法運算。??
*?@param?v1?被乘數??
*?@param?v2?乘數??
*?@return?兩個參數的積??
*/??
public?static?double?mul(double?v1,double?v2){ ??BigDecimal?b1?=?new?BigDecimal(Double.toString(v1)); ??BigDecimal?b2?=?new?BigDecimal(Double.toString(v2)); ??return?b1.multiply(b2).doubleValue(); ??
} ??/**??
*?提供(相對)精確的除法運算,當發生除不盡的情況時,精確到??
*?小數點以后10位,以后的數字四舍五入。??
*?@param?v1?被除數??
*?@param?v2?除數??
*?@return?兩個參數的商??
*/??
public?static?double?div(double?v1,double?v2){ ??return?div(v1,v2,DEF_DIV_SCALE); ??
} ??/**??
*?提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指??
*?定精度,以后的數字四舍五入。??
*?@param?v1?被除數??
*?@param?v2?除數??
*?@param?scale?表示表示需要精確到小數點以后幾位。??
*?@return?兩個參數的商??
*/??
public?static?double?div(double?v1,double?v2,int?scale){ ??if(scale<0){ ??throw?new?IllegalArgumentException( ??"The?scale?must?be?a?positive?integer?or?zero"); ??} ?BigDecimal?b1?=?new?BigDecimal(Double.toString(v1)); ??BigDecimal?b2?=?new?BigDecimal(Double.toString(v2)); ??return?b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); ??
} ?/**??
*?提供精確的小數位四舍五入處理。??
*?@param?v?需要四舍五入的數字??
*?@param?scale?小數點后保留幾位??
*?@return?四舍五入后的結果??
*/??
public?static?double?round(double?v,int?scale){ ??if(scale<0){ ? throw?new?IllegalArgumentException("The?scale?must?be?a?positive?integer?or?zero"); ? } ??BigDecimal?b?=?new?BigDecimal(Double.toString(v)); ??BigDecimal?one?=?new?BigDecimal("1"); ??return?b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); ??
} };
?見:http://blog.csdn.net/huiwenjie168/article/details/6998140
?
?
?