python中的小數精度及浮點數計數原理

2021-10-05 04:33:26 字數 2650 閱讀 2467

round()內建方法

輸入引數第一位為輸入的數值,第二位為小數點後儲存位數,不填預設為保留小數點後一位且取整

>>

>

round

(2.5

)3.0

>>

>

round(-

2.5)

-3.0

>>

>>

round

(2.675

)3.0

>>

>>

round

(2.675,2

)2.67

不過round()有個坑

round()如果只有乙個數作為引數,不指定位數的時候,返回的是乙個整數,而且是最靠近的整數。一般情況是使用四捨五入的規則,但是碰到捨入的後一位為5的情況,如果要取捨的位數前的數是偶數,則直接捨棄,如果奇數會向上取捨。看下面的示例(就是這麼神奇):

>>

>

round

(2.555,2

)2.56

>>

>>

round

(2.565,2

)2.56

>>

>>

round

(2.575,2

)2.58

>>

>>

round

(2.585,2

)2.58

使用格式化

print

("付款金額為:"

.format

(2.435))

付款金額為:

2.44

print

("付款金額為:"

.format

(2.434))

付款金額為:

2.43

print

("付款金額為:"

.format

(2.445))

付款金額為:

2.44

print

("付款金額為:"

.format

(2.444))

付款金額為:

2.44

使用:.2f,來表示小數,其中數字可以改為任意數字,對應保留為相應位數的小數點。同時和round()一般情況是使用四捨五入的規則,但是碰到捨入的後一位為5的情況,如果要取捨的位數前的數是偶數,則直接捨棄,如果奇數會向上取捨

這裡還有個小tips如果不加數字前的』.』,那麼不管數字是多少所有的都會預設保留小數點後6位

print

("付款金額為:"

.format

(2.435))

付款金額為:

2.435000

高精度使用decimal模組,配合getcontext

#該方法最好用於計算

```python

from decimal import decimal, getcontext

getcontext(

).prec =

3price = decimal(

1.12345

)print

(price)

1.1234500000000000596855898038484156131744384765625

weight = decimal(

1.12345

)print

(weight)

1.1234500000000000596855898038484156131744384765625

result = decimal(price * weight)

print

("付款金額為:{}"

.format

(result)

)付款金額為:

1.26

這裡簡單解釋下為什麼小數會變成那麼大一串數字。

浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,乙個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是完全相等的。浮點數可以用數學寫法,如1.23,3.14,-9.01,等等。但是對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。

整數和浮點數在計算機內部儲存的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四捨五入的誤差。

getcontext().prec方法控制小數點位置,四捨五入

這裡有個坑需要注意的是getcontext().prec對於數值較大的運算,可以設定的適中,如9不然最後出現的值,可能無法正常顯示

除法

a =

1b =

3print

(a / b)

0.3333333333333333

剛剛簡單提過,是的,python中的除法是精確運算,結果為float小數,最大精度為python預設位數,小數點後16位

以上就是常用的幾種方法,其他其實還有math模組裡的方法啥的,不是常用的就不介紹了

Python 浮點型精度問題

目錄print 0.1 0.2 print 0.1 0.1 0.1 0.2 print 0.1 0.1 0.1 0.3 輸出 0.30000000000000004 0.10000000000000003 5.551115123125783e 17出現這種精度問題 因為十進位制與二進位制的相互轉換 ...

FPGA浮點小數與定點小數的換算及應用

有些fpga中是不能直接對浮點數進行操作的,只能採用定點數進行數值運算。所謂定點小數就是把小數點的位置固定,我們要用整數來表示小數。先以10進製為例。如果我們能夠計算12 34 46的話,當然也就能夠計算1.2 3.4 或者 0.12 0.34了。所以定點小數的 加減法和整數的相同,並且和小數點的位...

python 浮點數的精度問題

程式語言浮點數由單精度型和雙精度型兩種 單精度型佔4個位元組32位的記憶體空間只能提供七位有效數字 雙精度型佔8個位元組64位的記憶體空間可提供17位有效數字 python 3 浮點數預設的是 17位數字的精度 將精度高的浮點數轉化成精度低的浮點數,內建方法 round roud 2.873 2 2...