深入了解浮點精度(四。嚴格精度的浮點運算)

2021-09-25 14:48:02 字數 539 閱讀 3701

上一章:深入了解浮點精度(三。浮點不準確)

如果你不嚴謹要求的話,浮點型別自身的運算可以滿足一些基本的需要,

但對於財務問題恐怕就不行了。為什麼呢?

比如說double 100 = 99.999999999998

那麼在購買的時候,乙個商品賣了100元,你支付完成後,發現只支付了99.9999999998,這樣恐怕就會引起一系列判斷紊亂了。

如果嚴格控制浮點型別的精度呢?

答案就是使用bigdecimal,如下使用:

new bigdecimal("0.05") .add(new bigdecimal("0.01")) = 0.06
這是加法,還要其他的運算,都是嚴格精度的。

但需要注意的一點是,bigdecimal的構造方法很多,在進行浮點構造時千萬別使用bigdecimal(double),而是使用bigdecimal(string).bigdecimal(double)也是不準確的。

深入了解浮點精度(五,小於1的浮點儲存)

深入了解浮點精度 一,有趣的現象

非程式科班出身,或對浮點精度只有少量了解的同學.網上的教程很少有循序漸進的,作此文以彌補之。先看乙個現象吧 system.out.println 0.05 0.01 system.out.println 1.0 0.42 system.out.println 4.015 100 system.out...

浮點型失去精度的解釋

從原理上來講,任何一門語言對於浮點數的計算都是不精確的。因為現在的computer都是基於二進位制數來儲存計算的。例如計算8 3時,computer會轉換為二進位制的加法1000 11 1011,然後再轉換為十進位制數為11。這種演算法對於整數來說是不會產生誤差的 如果不超過計算範圍 而對於浮點數計...

PHP 浮點數的精度

浮點數的精度有限。儘管取決於系統,php 通常使用 ieee 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e 16。非基本數 算可能會給出更大誤差,並且要考慮到進行復合運算時的誤差傳遞。此外,以十進位制能夠精確表示的有理數如 0.1 或 0.7,無論有多少尾數都不能被內部所使用的二...