float和double型的底層實現是二進位制的。十進位制中的乙個有限位數小數,轉換成二進位制就不一定是有限位數了,一旦位數超過的float和double型的位數寬度,就會出現「精度溢位」。所以float和double型是為了科學計算而設計的,並不適合精確的十進位制計算.
就像乙個十進位制的小數,要不斷地乘以2取整,但在這個過程中可能會一直迴圈下去,這就造成了資料的不精確。
所以在必須要求資料的精確度時,不能使用float和double.
public class test{
public static void main(string args)
system.out.println(0.05+0.01);
system.out.println(1.0-0.42);
system.out.println(4.015*100);
system.out.println(123.3/100);
輸出結果為:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
bigdecimal類可解決計算精度問題可使用bigdecimal類建立乙個封裝類。封裝加減乘除操作
例:對乙個小數進行指定位數的四捨五入:
bigdecimal bd = new bigdecimal("0.9851095");
bigdecimal one = new bigdecimal("1");
system.out.println(bd.divide(one, 3, bigdecimal.round_half_up));
bigdecimal中還有很多相關的數值之間的計算方法,以及精確到的位數和四捨五入等
tomcat記憶體溢位問題解決方法
今天在做專案時經常發生記憶體溢位的問題,每次重新編譯class都會出現這個異常,上網搜了一下資料,終於解決這個問題了!一般安裝完eclipse之後,在安裝目錄下你應該可以看到有乙個eclipse.ini 檔案,對了,就是在這個檔案裡面修改,我開啟同事機器上這個檔案,裡面的內容是 vmargs dos...
打包時,node記憶體溢位問題解決方法
在使用npm run build打包時,遇到node記憶體溢位問題。網上查詢到的決絕方案。解決方案一 安裝increase memory limit外掛程式,擴大node的記憶體限制 但是,這個解決方案在我的專案裡面並沒有用 解決方案二 通過package.json加大記憶體,在啟動node nod...
解決除法溢位問題
王爽組合語言第二版實驗10.2 一 實驗要求 當用div指令進行8位除法運算時結果大於8位,或進行16位除法運算結果大於16位時,會出現除法溢位的錯誤。要求編寫乙個子程式,實現支援結果不會出現溢位的除法運算 二 演算法概述 通過乙個公式將可能產生溢位的運算x n,轉變為多個不會產生溢位的除法運算。公...