Java开发中 Double 和 float 不能直接运算
不能直接運(yùn)算?是因?yàn)橛?jì)算機(jī)儲存浮點(diǎn)類型的數(shù)值使用指數(shù)和尾數(shù)來表示?這就意味著計(jì)算時(shí)會(huì)出現(xiàn)“精度缺失”的現(xiàn)象?
為了解決這個(gè)問題?我們引入 java.math.BigDecimal類來進(jìn)行精確計(jì)算。
具體如下:
public class Arith {
?
? ? ?//加法運(yùn)算
?? ?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(); ?
?? ???? } ?
?? ?// 減法運(yùn)算
?? ?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(); ?
?? ???? }
?// 乘法運(yùn)算
?? ?public static double mul(double d1, double d2){? ? ? ??
?? ????????? BigDecimal b1 = new BigDecimal(d1);
?? ????????? BigDecimal b2 = new BigDecimal(d2);
?? ???????? return b1.multiply(b2).doubleValue();
?? ????? }
?? ?// 除法運(yùn)算
?? ?public static? double div(double d1,double d2,int len) {
?? ????????? BigDecimal b1 = new BigDecimal(d1);
?? ????????? BigDecimal b2 = new BigDecimal(d2);
?? ???????? return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
?? ????? }
?? ?// 四舍五入
?? ???? public? double round(double d,int len) {?
?? ????????? BigDecimal b1 = new BigDecimal(d);
?? ????????? BigDecimal b2 = new BigDecimal(1);
?? ???????? // 任何一個(gè)數(shù)字除以1都是原數(shù)字
?? ????????
// ROUND_HALF_UP是BigDecimal的一個(gè)常量,表示進(jìn)行四舍五入的操作
?? ???????? return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue();
?? ????? }
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/igong/p/9795710.html
總結(jié)
以上是生活随笔為你收集整理的Java开发中 Double 和 float 不能直接运算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql常用命令(二)
- 下一篇: 成都欢乐谷凭高考优惠政策