本文目錄一覽:
- 1、java double類型變數,相加或相減後面小數為什麼會不一樣呢?
- 2、Java中 double 和 Double的區別 兩者能互相轉換和加減嗎 求方法
- 3、java int double 加減法 基本類型運算問題
- 4、java double數據類型運算問題
- 5、關於JAVA double類型相減的問題
- 6、java兩個double變數相減
java double類型變數,相加或相減後面小數為什麼會不一樣呢?
該問題主要原因是浮點數值採用二進位系統表示,而在二進位系統中無法精確的表示1/10。就像我們平時使用的十進位中無法精確的表示1/3是一樣的道理,如果需要在數值計算中不含有任何誤差,要使用BigDecimal類進行編程。
具體的代碼如下
//兩個Double數值相加
public static Double add (Double value01,Double value02){
BigDecimal b1=new BigDecimal(value01.toString());
BigDecimal b2=new BigDecimal(value02.toString());
return b1.add(b2).doubleValue();
}
//兩個Double數值相減
public static Double sub (Double value01,Double value02){
BigDecimal b1=new BigDecimal(value01.toString());
BigDecimal b2=new BigDecimal(value02.toString());
return b1.subtract(b2).doubleValue();
}
Java中 double 和 Double的區別 兩者能互相轉換和加減嗎 求方法
double是基本的數據類型,Double是對象,是對double這個基本類型的封裝。
關於Double的具體內容,可見Java的API手冊。
java int double 加減法 基本類型運算問題
1.-2.8421709430404007E-14表示-2.8421709430404007乘以10的-14次方,計算機能準確表示十進位的整數,但不能準確表示十進位小數。System.out.println(150.0+0+183.28-0-183.28-150.0);150.0+0+183.28-0-183.28-150.0的結果為0.00000000000…,只不過你的輸出結果為double型,精度比較高,沒有超出列印函數(println之類的)的默認精度而已。
2.System.out.println(((150.00)+0.00+(183.28))-(0.00+(183.28)+(150.00)));中將((150.00)+0.00+(183.28))作為個運算單元,二個括弧內的運算的結果肯定一樣,與精度無關。結果當然為0。
3.用System.out.println((long)(150.0+0+183.28-0-183.28-150.0));(150.0+0+183.28-0-183.28-150.0)的結果為0.00000000…,轉換成long,捨棄小數位,結果自然為0;
4.System.out.println(150.0F+0+183.28F-0-183.28F-150.0F); 運算結果為float型,超出列印函數(println之類的)的默認精度,截取下來為0。
不知道解釋的你滿意不?
java double數據類型運算問題
使用Java,double 進行運算時,經常出現精度丟失的問題,總是在一個正確的結果左右偏0.0000**1。
特別在實際項目中,通過一個公式校驗該值是否大於0,如果大於0我們會做一件事情,小於0我們又處理其他事情。
這樣的情況通過double計算出來的結果去和0比較大小,尤其是有小數點的時候,經常會因為精度丟失而導致程序處理流程出錯。
所以一般對double類型進行運算時,做好對結果進行處理,然後拿這個值去做其他事情。
目前總結如下:
/**
* 對double數據進行取精度.
* @param value double數據.
* @param scale 精度位數(保留的小數位數).
* @param roundingMode 精度取值方式.
* @return 精度計算後的數據.
*/
public static double round(double value, int scale,
int roundingMode) {
BigDecimal bd = new BigDecimal(value);
bd = bd.setScale(scale, roundingMode);
double d = bd.doubleValue();
bd = null;
return d;
}
/**
* double 相加
* @param d1
* @param d2
* @return
*/
public double sum(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.add(bd2).doubleValue();
}
/**
* double 相減
* @param d1
* @param d2
* @return
*/
public double sub(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.subtract(bd2).doubleValue();
}
/**
* double 乘法
* @param d1
* @param d2
* @return
*/
public double mul(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.multiply(bd2).doubleValue();
}
/**
* double 除法
* @param d1
* @param d2
* @param scale 四捨五入 小數點位數
* @return
*/
public double div(double d1,double d2,int scale){
// 當然在此之前,你要判斷分母是否為0,
// 為0你可以根據實際需求做相應的處理
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.divide
(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
這樣,計算double類型的數據計算問題就可以處理了。
另外補充一下 JavaScript 四捨五入的方法:
小數點問題
Math.round(totalAmount*100)/100 (保留 2 位)
function formatFloat(src, pos)
{
return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);
}
關於JAVA double類型相減的問題
可以相減 你的寫法有錯
輸出函數的原型是print(String) 也就是括弧裡面的是String類型
多個string連接的時候用就 ” + ” 連接 你這裡出現了 ” – ” 號 這是不允許的(double類型默認會調用toString()將數據轉換成string)
當你用:System.out.println(“兩個數的差是:”+a3-a4);減號被認為是錯誤的…
正確的寫法應該是:System.out.println(“兩個數的差是:”+(a3-a4));
至於你說 加 可以 只怕結果不是你想要的吧
乘除是因為運算符的優先順序問題可以
建議你去看一些相關的基礎吧
java兩個double變數相減
要不然結果是多少?
3.7238113E7
也就是3.7238113X10^7
a-b 當然就是那結果啊
原創文章,作者:YUKZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133120.html