我們在計算float這個資料型態時
有時候會發現結果會跟真正我們算出來會有點差異
其實是因為在電腦科學中
浮點
是一種對於實數的近似值表現法
維基百科是這麼說的:
由一個有效數字(即尾數)加上冪數來表示,通常是乘以某個基數的整數次指數得到。以這種表示法表示的數值,稱為浮點數(floating-point number)。利用浮點進行運算,稱為浮點計算,這種運算通常伴隨著因為無法精確表示而進行的近似或捨入。
進行浮點數運算時,會將數值先轉為二進位
0.5 => 由 1*2^-1 得到
但如果是0.1
0.1 => 1*2^-4 + 1*2^-5 + 1*2^-8 + 1*2^-9+… 無止盡的下去逼近0.1
也就是說
你的0.1不是真正的0.1
而是一個近似值
雖然在print出來時候看起來是0.1
講了這麼多似乎有點抽象
因此我們用python來看一下例子
我用79.99*100.00
答案應該是要等於7799.00
這時候
就需要用到精確運算
可以使用python中的decimal 套件解決
這是python std套件
直接引入即可
用字串創建decimal.Decimal
記得是使用字串哦
以下為使用結果
得到了精確的數字
這樣
我們每次計算不都是很麻煩嗎?
其實實際上,除非你真的無法接受一點點誤差
或是真的需要到很精準的數字
不然是可以忽略的哦
沒有留言:
張貼留言