JAVA 實現(xiàn)精確的加減乘除運算

JAVA在加減乘除運算時易發(fā)生精度丟失,達不到我們想要的計算結(jié)果;為了能夠精確表示、計算浮點數(shù),JAVA提供了BigDecimal類,可以以BigDecimal為基礎(chǔ)定義一個Arith工具類,代碼如下:

import java.math.BigDecimal;

publicclassArith

{

//默認(rèn)除法運算精度

privatestaticfinalintDEF_DIV_SCALE =10;

//構(gòu)造器私有化,讓這個類不能實例化

privateArith(){}

//提供精確的加法運算

publicstaticdoubleadd(doublev1,doublev2)

{

BigDecimal b1 = BigDecimal.valueOf(v1);

BigDecimal b2 = BigDecimal.valueOf(v2);

returnb1.add(b2).doubleValue();

}

//精確的減法運算

publicstaticdoublesub(doublev1,doublev2)

{

BigDecimal b1 = BigDecimal.valueOf(v1);

BigDecimal b2 = BigDecimal.valueOf(v2);

returnb1.subtract(b2).doubleValue();

}

//精確的乘法運算

publicstaticdoublemul(doublev1,doublev2)

{

BigDecimal b1 = BigDecimal.valueOf(v1);

BigDecimal b2 = BigDecimal.valueOf(v2);

returnb1.multiply(b2).doubleValue();

}

//提供(相對)精確的除法運算,當(dāng)發(fā)生除不盡的情況時

//精確到小數(shù)點后10位的數(shù)字四舍五入

publicstaticdoublediv(doublev1,doublev2)

{

BigDecimal b1 = BigDecimal.valueOf(v1);

BigDecimal b2 = BigDecimal.valueOf(v2);

returnb1.divide(b2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();

}

publicstaticvoidmain(String[] args)

{

System.out.println("0.05 + 0.01 = "+ Arith.add(0.05,0.01));

System.out.println("1.0 - 0.42 = "+ Arith.sub(1.0,0.42));

System.out.println("4.015*100 = "+ Arith.mul(4.015,100));

System.out.println("123.3/100 = "+ Arith.div(123.3,100));

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容