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;
}
這樣使得在二進位制裡面的運算不會產生誤差. 相關文章
- 二進位制、位運算、位移運算
- 二進位制與二進位制運算
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 二進位制運算加減乘除+快速冪
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- Java二進位制和位運算,這一萬字準能餵飽你Java
- 十進位制——二 (八、十六 )進位制
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 關於Java中進位制轉換以及位運算問題Java
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 二進位制、十進位制與十六進位制相互轉化
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 二進位制轉十進位制快速方法
- 16進位制的簡單運算(迴圈)
- JavaScript十進位制轉換為二進位制JavaScript
- 十進位制轉二進位制推導(草稿)
- 三分鐘熟悉進位制轉換與位運算
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- n進位制轉十進位制
- 十進位制轉十六進位制
- 進位制詳解:二進位制、八進位制和十六進位制
- 位運算進階
- Qt進位制轉換(十進位制轉十六進位制)QT
- 二進位制數的運算原理與閘電路實現
- 使用位運算進行加法運算
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 計算機中的二進位制計算機
- 3416:【例72.1】 二進位制轉化為十進位制
- 計算機求解10進位制轉換任意進位制計算機
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- Python 十進位制轉換為二進位制 高位補零Python
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 二進位制
- (二進位制)