我有一個項目使用泰勒系列創建一個科學計算器。此外,我正在分析一個數字到ieee 754標準浮點系統。獲取存儲的實際數量
在我的計算器中,用戶選擇是否需要單精度或雙精度:我使用float和double變量, ,然後分析ieee 754規範後面的數字。
如果用戶想要雙精度的分析是這樣的:
double analyze=3.45
BigDecimal bd=new BigDecimal(analyze)
這給了我
3.45000000000000017763568394002504646778106689453125
是這個數字是存儲在二進制格式的實際數量電腦內存?
如果不是有什麼辦法,我可以有存儲號碼的真實價值?
此外,爲什麼會發生這種情況?
double analyze=0.5
BigDecimal db=new BigBecimal(analyze)
只會打印0.5
- 爲什麼我失去顯著數字?
誰能告訴我,爲什麼不通過運行此發生這種情況
BigDecimal one=new BigDecimal(0.1);
BigDecimal five=one.multiply(new BigDecimal(5)) ;
System.out.println("5 times 0.1 is "+" "+ five);
System.out.println("But the 0.5 in BigDecimal is " + " "+ new BigDecimal(0.5));
你 5倍0.1是0.5000000000000000277555756156289135105907917022705078125 但是在BigDecimal的0.5是0.5
不,這不是存儲的數字。存儲的數字是* binary *。你可以用'Double.doubleToRawLongBits'來訪問它。 –
我還必須做一個其他問題whick讓我困惑,如果我轉換一個浮點數例如0.5到bigdecimal它給了我一個其他的結果比轉換0.1到bigdecimal並添加它5次! – user1911078
這兩個值應該非常相似,但由於舍入誤差,您可能會看到一些差異是最不重要的一位或兩位數。 –