一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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中浮點數精度問題的解決方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 白丝h视频 | 极品虎白女在线观看一线天 | 亚欧洲乱码专区视频 | yellow视频在线观看免费 | 欧美又黄又激烈真实床戏 | 特黄特色大片免费影院 | 国产美女极品免费视频 | 肥奶丰熟肥妇 | 欧美一区二区三区在线观看不卡 | 女人叉开腿让男人桶 | 波多野结在线 | 香蕉国产精品偷在线播放 | 精品国产乱码久久久久久人妻 | 极品ts赵恩静和直男激战啪啪 | 毛片免费视频观看 | 免费观看欧美成人h | 大胆暴露亚洲美女xxxx | 国产老村长足疗店对白 | 99在线精品视频 | 俺去啦最新官网 | 国产a一级毛片爽爽影院 | 无人区乱码区1卡2卡三卡在线 | 国产大片51精品免费观看 | 亚洲一级视频在线观看 | 日本高清视频网址 | 国产最新进精品视频 | 色老板在线免费观看 | 特级非洲黑人一级毛片 | 男人视频网站 | 日本在线精品视频 | 亚洲zooz人禽交xxxx | 国产亚洲精品精品国产亚洲综合 | 亚洲一级特黄特黄的大片 | 毛片影院 | 无限韩国视频免费播放 | 91素人约啪 | 精品videoss另类日本 | 久草草在线视视频 | 三上悠亚精品专区久久 | 韩剧hd| 麻豆资源 |