1. 程式人生 > >動手動腦及課後實驗性問題

動手動腦及課後實驗性問題

比較 big 兩個 使用 部分 精度 個數 誤差 不能

一關於精度損失

關於java對於0.05+0.011-0.42等計算的不準確原因是因為計算機是以二進制來儲存一個數的,有的數從二進制轉化到十進制時就會出現誤差這就導致了計算的不準確,比如0.01在電腦裏儲存的其實是0.00999999999或者是其他的一個很接近0.01的數但是計算機畢竟是拿這個接近0.01的數去運算所以就出現了計算時候的錯誤

而解決這一問題的方法就是使用BigDecimal類,就比如BigDecimal a = new BigDecimal(m); BigDecimal b = new BigDecimal(n);a.add(b)來求m+n這就不會有誤差,但要記住mn都是字符串類型而不能使用double

類型,因為雖然BigDecimal 是可以比較精確的計算,但是double是無法精確到1/10的就像十進制無法精確表示1/3一樣。Double裏面的的值已經不準確了,即使BigDecimal 可以較為精確的計算但是double給他的值就是不正確的,所以沒辦法得到正確答案。

二動手動腦

以下代碼的輸出結果是什麽?

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

為什麽會有這樣的輸出結果?、

第一個為X+Y=100200第二個為300=X+Y因為第一個先計算的是一個字符串和一個數字所以‘+’被認為是連接符只是連續輸出可三部分,而第二個一開始是兩個數字,‘

+’被認為成了加號計算出X+Y然後又輸出他們的和這時就成了數字與字符串這時‘+’又被認為成了連接符。關於‘+’的運用總結一下就是2個操作數中好友字符串時為連接符,都為數字時為運算符。

動手動腦及課後實驗性問題