python的浮點數演算法

2021-08-28 02:00:56 字數 1459 閱讀 4410

本菜基本完結了pos機的第二個頁面,但是還是遇到了不少問題,本次總結其中之一,浮點數的計算。

統計商品數量時,本來是直接加一就可以,但是本菜覺得應該照顧一下論斤買的商品,於是直接把 += 1 改為了 +=0.5,於是網頁乾乾脆脆的報錯不顯示了,本菜通過強化過的報錯函式,發現錯誤在於資料型別不正確,報的錯誤是:typeerror at /item/ unsupported operand type(s) for +=: 'decimal.decimal' and 'float',decimal意為十進位制,也就是說十進位制和浮點型數因為型別不同不能運算,js中可以直接計算的內容到了python 竟然連加法都不能通常計算,於是本菜找到的方法是將浮點型轉換為十進位制小數,即:number = decimal('data')由於在  django  框架,於是檢視中新增  from decimal import decimal.

本菜還特意查詢過了python語言內的資料計算發現如下內容:

首先在終端中,進入python語言環境,然後:

>>> 1/3

0.3333333333333333(16個3,共17位)

>>> 0.333333333333333*3

0.9999999999999989

最後兩位變成了 』 89 『,這應該是計算的錯誤,但是計算機連算數都算錯還能幹啥,真正的原因在於python只列印機器中儲存的二進位制值的十進位制近似值,部分機器上即使列印的是正確的結果但是實際儲存的最近似的二進位制小數。

>>> 0.1+0.1+0.1==0.3

false

這是本菜最感興趣的地方,經過搜尋後發現歷史上,python 提示符和內建的 repr() 函式選擇乙個 17 位精度的數字,0.10000000000000001。從 python 3.1 開始,python(在大多數系統上)能夠從這些數字當中選擇最短的乙個並簡單地顯示 0.1。二進位制浮點數計算有很多這樣意想不到的結果。

>>> a = 1.345

>>> a.as_integer_ratio()

(6057341498813317, 4503599627370496)

當你真的想要知道浮點數精確值的時候,python 提供這樣的工具可以幫助你.float.as_integer_ratio() 方法以分數的形式表示乙個浮點數的值.

>>> a == 6057341498813317/4503599627370496

true

float.hex() 方法以十六進製制表示浮點數,給出的同樣是計算機儲存的精確值:

>>> a.hex

當計算量過大時許多語言會把結果捨入到 17 位有效數字,而不是顯示全部的十進位制值:

>>> 0.1 * 3**199

8.853799629195827e+93

Python 生成浮點數

生成一定範圍內的浮點數,如下,請指正 def flo start,stop,step result 計算需要的次數 sum int abs stop start step 1 for i in range start,sum start start step return result call f...

浮點數的儲存以及 浮點數的比較

浮點數的儲存採用的是近似的原理 float儲存格式為 s e m 1位符號位 8位指數 23位尾數 轉成數值即為 v 1 s 1.m 2 e 127 對於16.5轉成二進位制為00010000.1 1.00001 2 4,那麼在記憶體的表示為 符號位 指數4 127 131 尾數 0 1000001...

演算法題 浮點數加法

求2個浮點數相加的和 題目中輸入輸出中出現浮點數都有如下的形式 p1p2.pi.q1q2.qj 對於整數部分,p1p2.pi是乙個非負整數 對於小數部分,qj不等於0 輸入描述 對於每組案例,每組測試資料佔2行,分別是兩個加數。輸出描述 每組案例是n行,每組測試資料有一行輸出是相應的和。輸出保證一定...