請各位大大幫忙解答,我是剛學python的新手,不曉得為什執行程式後,答案應該是-10.4
但不曉得為啥會是-10.399999999999999,請幫忙解惑,感謝
程式碼:
number1 = input("請輸入第一個數字: ")
print(float(number1))
number2 = input("請輸入第二個數字: ")
print(float(number2))
number = float(number1) + float(number2)
number = float(number)
print(number)
結果:
請輸入第一個數字: -8.2
-8.2
請輸入第二個數字: -2.2
-2.2
-10.399999999999999
因為浮點數(flot)計算會有誤差的.若要精確度較高,可以使用 Decimal
https://docs.python.org/3.9/library/decimal.html
可以參考
才小數點一位
而且是加法,不是除法
就有這種精確度的差異
用蟹堡王餐廳的贈品都不會算錯了
還什麼元宇宙哩
請享用![/images/emoticon/emoticon37.gif]
(/images/emoticon/emoticon37.gif)
IEEE-754 與浮點數運算
https://ithelp.ithome.com.tw/articles/10266532
認真來說,電腦的程式計算。它其實只會「加」法。
計算的過程全是用2進位的方式來計算的。
這其實不只在Python會發生,幾乎所有的程式都會有同樣的情況。
所以一般來說,得要看程式裏是否有提供精準數類型的東西來處理。
或是自已手動處理。
早期我都會用字串或是四捨五入的方式來處理。
現在大多比較偏向用物件或是套件來處理。
前面有大大跟你說解法了,我這邊補充一下,程式語言中關於Floating-Point Arithmetic(浮點數)的小知識。
本文主要引用或翻譯自THE FLOATING-POINT GUIDE,若想更深入了解浮點數二三事,以及各語言對於浮點數運算的最佳實例,很推薦這個網站!
基本上,我們電腦使用的浮點數格式,其實無法精確表示像0.1、0.2、0.3這種數字,當程式被執行或編譯的時候,在浮點數格式中,你看到的0.1其實是被四捨五入過,最接近0.1的數字,所以存在著一點點的四捨五入誤差,而這誤差甚至在浮點數被運算前就已經存在。
除了python外,好幾個語言(如C#、Java、JavaScript、Perl、PHP、Python、Ruby、Rust、SQL)也有浮點數運算的問題,我在PHP被雷過一次,在JavaScript又被雷一次…
解決方式就像前兩樓的大大所說,使用python的Decimal類型即可:
from decimal import * # import decimal
getcontext().prec = 6 # 設定你要精度,預設為28
number1 = input("請輸入第一個數字: ")
print(Decimal(number1))
number2 = input("請輸入第二個數字: ")
print(Decimal(number2))
number = Decimal(number1) + Decimal(number2)
number = Decimal(number)
print(number)
在一般情況下,浮點數運算或許不會有什麼大問題,頂多就是結果看起來有點嚇人(?),但在對精確度要求很嚴格的情況(例如購物車的金額計算),忽略浮點數問題造成的後果……嗯,大概就是這樣,所以請把浮點數運算問題謹記在心!
目前也在學習中,補充一下一本推薦書籍有中文書 Python功力提升的樂趣 樓主的問題可以參考這一小節 Don’t Assume Floating-Point Numbers Are Perfectly Accurate
書中也有介紹很多python會遇到的地雷