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