??? java中用DecimalFormat df = new
DecimalFormat("#######0.00");進行四舍五入時,如果最后一位為5,則會直接舍掉,而不會入上去。如:12.515,得到得
結果將是12.51。解決方法:
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();
????}
??? java中的浮點數類型float和double不能進行運算,遇到有些數據得到的數據不準確。如:3.121-1=3.1209999999998。解決方法:
public?class?Arith?{
????private?static?final?int?DEF_DIV_SCALE?=?10;
????
????/**
?????*?兩個Double數相加
?????*?@param?v1
?????*?@param?v2
?????*?@return?Double
?????*/
????public?static?Double?add(Double?v1,Double?v2){
????????BigDecimal?b1?=?new?BigDecimal(v1.toString());
????????BigDecimal?b2?=?new?BigDecimal(v2.toString());
????????return?b1.add(b2).doubleValue();
????}
????
????/**
?????*?兩個Double數相減
?????*?@param?v1
?????*?@param?v2
?????*?@return?Double
?????*/
????public?static?Double?sub(Double?v1,Double?v2){
????????BigDecimal?b1?=?new?BigDecimal(v1.toString());
????????BigDecimal?b2?=?new?BigDecimal(v2.toString());
????????return?b1.subtract(b2).doubleValue();
????}
????
????/**
?????*?兩個Double數相乘
?????*?@param?v1
?????*?@param?v2
?????*?@return?Double
?????*/
????public?static?Double?mul(Double?v1,Double?v2){
????????BigDecimal?b1?=?new?BigDecimal(v1.toString());
????????BigDecimal?b2?=?new?BigDecimal(v2.toString());
????????return?b1.multiply(b2).doubleValue();
????}
????
????/**
?????*?兩個Double數相除
?????*?@param?v1
?????*?@param?v2
?????*?@return?Double
?????*/
????public?static?Double?div(Double?v1,Double?v2){
????????BigDecimal?b1?=?new?BigDecimal(v1.toString());
????????BigDecimal?b2?=?new?BigDecimal(v2.toString());
????????return?b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();
????}
????
????/**
?????*?兩個Double數相除,并保留scale位小數
?????*?@param?v1
?????*?@param?v2
?????*?@param?scale
?????*?@return?Double
?????*/
????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(v1.toString());
????????BigDecimal?b2?=?new?BigDecimal(v2.toString());
????????return?b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
????}
}