java二進位制運算十進位制(精確運算)
public static void main(String[] args) {
System.out.println(2.0-1.1);
}
}
列印出來如圖所示,等於 0.8999999999999999 為什麼呢?
java中的double值用在數學方面來運算是沒有問題.
但是在二進位制中,計算十分之一(1/10)就會出現無限迴圈的數.
同理在十進位制中,對三分之一進行運算會出現無限迴圈的數字.(1/3 => 0.333333333333)
怎麼不讓java編譯不出現這種情況呢 !
java就提供了一個類,專門做整數操作的(BigInteger),還有一個類專門做浮點型別操作的(BigDecimal),它們都是Number的子類.
在BigDecimal的類裡面有String構造器來構造.
例如在java編譯器裡,下面的乘法運算BigDecimal構造器,.
b1=獲得book的值+"" 轉成字串.
b2=獲得quantity的值.
b3=b1乘以(b2).
返回一個b3的double值.
public double getSubtotal(){
/*
* 使用BigDecimal不會有誤差
* 要求必須使用String型別的構造器
*/
BigDecimal b1 = new BigDecimal(book.getCurrPrice() + ""); //一加 "" 就讓這個數變成字串了
BigDecimal b2 = new BigDecimal(quantity + "");
BigDecimal b3 = b1.multiply(b2); //multiply 乘以
return b3.doubleValue();
// 轉換為上面的寫法 return book.getCurrPrice() * quantity;
}
這樣使得在二進位制裡面的運算不會產生誤差. 相關文章
- 二進位制、位運算、位移運算
- 二進位制與二進位制運算
- 有趣的二進位制2—高效位運算
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 位運算(一):二進位制中1的個數
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- Java二進位制和位運算,這一萬字準能餵飽你Java
- 十進位制——二 (八、十六 )進位制
- N位二進位制數加減法運算圖靈機圖靈
- ACM 16進位制的簡單運算ACM
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 關於Java中進位制轉換以及位運算問題Java
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 二進位制、十進位制與十六進位制相互轉化
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- 二進位制轉十進位制快速方法
- 位運算--求一個 數二進位制中1的個數
- 16進位制的簡單運算(迴圈)
- 進位制換算
- JavaScript十進位制轉換為二進位制JavaScript
- Oracle二進位制與十進位制轉換Oracle
- 十進位制轉二進位制推導(草稿)
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- 三分鐘熟悉進位制轉換與位運算
- 位運算進階
- 1474 十進位制轉m進位制+1475 m進位制轉十進位制
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- python進位制轉換(二進位制、十進位制和十六進位制)及注意事項Python
- Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 使用位運算進行加法運算
- n進位制轉十進位制
- 十進位制轉十六進位制
- 十進位制與二進位制互相轉換指南
- 二進位制轉十進位制快速轉換方法