double型別的精度是15位,也就是說,它對數值的描述是有乙個範圍的,那麼,超出這個範圍,就會出現乙個誤差,這個誤差,會造成資料計算的失誤,大家或許會覺得,15位,足夠用了,但其實不對,大家平常就會用到,注意下面的例子:
double i = 0.0;
while (i < 10)
}
如果認為是上述結果的話,那你真失敗了~你可以跑一下,看看結果,當輸出5.9後,下乙個資料會是5.99999999999999,每次+0.1,這樣誤差就出來了,所以說,不能指望浮點數來精確計算。
如果要計算的話,應該加一些限制條件,比如:
double i = 0.0;while (i < 10)
}
說實話,我是不喜歡這麼寫,因為還要加一些條件限制,忒麻煩,我的專案如果用到浮點型別的話,一般都是資料庫numeric(18,2)引用的,orm框架的對映,會轉換成decimal,decimal精確的位數會更高一些,所以,我一般用decimal,唉,但是有個問題是,執行的效率,decimal沒有double高。。。
double型別的精度問題
一道很簡單的期望題,已知概率p求期望 顯然期望為1 p 但在精度處理上就有點麻煩了,題目要求答案以最簡分數的形式輸出,誤差要小於1e 6 但我一開始錯誤的使用了除法運算求1 p,再求 1 p 1e6 1e6的最簡分數 很顯然精度丟失 這是一條大忌,在高精度問題中一定要避免使用除法 所以正解是求1e6...
double型別精度損失問題
在十進位制中小數有些是無法完整用二進位制表示的。它們只能用有限位來表示,從而在儲存時可能就會有誤差。十進位制的小數採用乘2取整法進行計算,去掉整數部分後,剩下的小數繼續乘以2,直到小數部分全為0.有的小數可能取不到零就會一直迴圈 0.9 2 1.8 取整1 0.8 2 1.6 取整1 0.6 2 1...
double精度問題
double 相乘向上取整 param params return public static int upscore double d1,double d2 bigdecimal.setscale 方法用於格式化小數點 setscale 1 表示保留一位小數,預設用四捨五入方式 setscale ...