国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - Java中浮點數精度問題的解決方法

Java中浮點數精度問題的解決方法

2020-06-20 11:40mrr JAVA教程

這篇文章給大家介紹了Java中浮點數精度問題的解決方法,本文給大家介紹的非常詳細,有問題描述有原因分析,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧

問題描述

在項目中用Java浮點數計算時,發現對于4.015*100這樣的計算,結果不是預料中的401.5,而是401.49999999999994。如此長的位數,對于顯示來說很不友好。

問題原因:浮點數表示

查閱相關資料,發現原因是:計算機中的浮點數并不能完全精確表示。例如,對于一個double型的38414.4來說,計算機是這樣存儲它的:

轉成二進制:1001011000001110.0110011001100110011001100110011001100
轉成科

學計數法:1.0010110000011100110011001100110011001100110011001100×2^15

double型編碼格式是這樣的:

double 符號位1位 階碼11位 尾數52位

符號位:正數統一是0

階碼:15是正數,因此最高位是1,最低位減1,為10000001110

尾數:去掉最高位默認的1,為0010110000011100110011001100110011001100110011001100

組合起來,最終得到的編碼是:0 10000001110 0010110000011100110011001100110011001100110011001100

從這里可以看出來,主要原因在于二進制編碼使得小數部分無法完全精確表示,例如0.4 = 0.25 + 0.125 + ...,只能無限接近。所以在對浮點數做計算時會產生精度誤差。

解決辦法:高精度

Java中的BigDecimal可以支持任意精度的浮點數運算。在《Effective Java 》這本書中建議:float 和double 用來做科學計算或者是工程計算,而在商業計算中使用java.math.BigDecimal 。

BigDecimal有多種構造方法,如BigDecimal(double),BigDecimal(String),需要注意的是:構造參數為String類型時才能保證不丟失精度,因為double類型本身就是不完全精確的。故需要寫成這樣:BigDecimal("0.02")。

double類型的基本運算都能在BigDecimal中找到相對應的方法。另外,BigDecimal還可以配合NumberFormat做格式化輸出。

BigDecimal在做運算的時候都會生成新的BigDecimal對象,因此相對double來說會帶來更多的性能開銷。

高精度實現初探

那么BigDecimal是如何做到能夠表示任意精度的呢?這里只做一個初步的分析。

首先看BigInteger的實現。普通的int型是32位,因此有范圍限制。BigInteger中有成員變量int[] mag,這樣變長的int數組使得表示任意大小的整數成為可能。

再看BigDecimal的實現。它的官方介紹中說,任意一個BigDecimal都可以表示為unscaledValue × 10^-scale的形式。unscaledValue是一個任意大小的整數,在源代碼中對應BigInteger intVal這個成員變量;scale是階數,在源代碼中對應int scale這個變量。這樣就在BigInteger的基礎上得到了BigDecimal的實現。

以上所述是小編給大家介紹的Java中浮點數精度問題的解決方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言。

延伸 · 閱讀

精彩推薦
390
主站蜘蛛池模板: 久久久久99精品国产片 | av电影免费在线观看 | 99精品欧美一区二区三区综合在线 | 中文在线一区 | 欧美不卡 | www.欧美日韩 | 国产在线一区不卡 | 精品久久久久久久久久久 | 日本少妇一区二区三区 | 成人av网站免费观看 | 中文字幕在线一区 | 色婷婷在线视频观看 | 99re在线精品 | 一本亚洲| 青青草97 | 国产成人精品免高潮在线观看 | 在线播放一区二区三区 | 欧美一级二级视频 | 久久国产一区 | 日韩在线小视频 | av观看免费 | 自拍第1页| 国产日产精品一区二区三区四区 | 国产偷窥老熟盗摄视频 | 一区二区三区精品视频 | 国产精品国产三级国产aⅴ中文 | 日韩无在线 | 日韩成人在线电影 | 国产精品一区二区久久久 | 成人黄色av | 久久久久久久久久久高潮 | 综合色综合 | 日韩精品| 成人h视频 | 在线a毛片| 精品美女久久久 | 中文字幕一区二区三区日韩精品 | 亚洲福利 | 91精彩视频在线观看 | 国内美女人妻一级毛片免费看 | 成人国产精品久久久 |