Python中小數數字

2021-08-28 15:22:12 字數 2063 閱讀 2184

python2.4開始引入一種新的核心資料型別:小數物件。 比其他資料型別複雜一些,小數是通過通過乙個匯入的模組呼叫函式後建立,而不是通過執行常量表示式來建立。從功能上來說,小數物件就像浮點數,只不過它們有固定的位數和小數點,因此小數是有固定的精度的浮點數。

使用了小數物件,我們能夠使用乙個只保留兩位小數字精度的浮點數。此外,我們能夠定義如何省略和截斷額外的小數數字。儘管它對平常的浮點數型別來說帶來了微小的效能損失,小數型別對表現固定精度的特性(例如,錢的總和)以及對實現更好的數字精度是乙個理想的工具。

>>> 0.1 + 0.1 + 0.1 - 0.3

5.551115123125783e-17

>>> print(0.1 + 0.1 + 0.1 - 0.3)

5.551115123125783e-17

>>>

上面的計算結果或列印本應該得到0,結果卻是乙個接近0的數字,我們都知道,這是因為與硬體相關的浮點數運算在精度方面的內在的缺陷! 如果在數字要求很嚴格的地方,比如銀行顯然是不允許的。上述問題,如果使用小數物件,是可以解決的

>>> from decimal import decimal

>>> decimal("0.1") + decimal("0.1") + decimal("0.1") - decimal("0.3")

decimal('0.0')

>>>

decimal函式還可以隨著輸入的小數字數,自動公升級位數:

>>> decimal("0.1") + decimal("0.10") + decimal("0.10") - decimal("0.30")

decimal('0.00')

>>>

decimal模組中的其他工具還可以用來設定所有小數數值的精度、設定錯誤處理等。 例如,這個模組中的乙個上下文物件允許物件指定精度和捨入模式。 該精度全域性性地適用於呼叫執行緒中建立的所有小數:

>>> from decimal import decimal              # 未設定精度

>>> decimal(1) / decimal(7)

decimal('0.1428571428571428571428571429')

>>> decimal.getcontext().prec = 2 # 設定精度為2

>>> decimal(1) / decimal(7)

decimal('0.14')

>>>

這對於處理貨幣的應用程式特別有用,其中,美分表示為兩個小數字數。這個上下文裡,小數實際上是手動捨入和字串格式化的一種替代方式:

>>> 1999 + 1.33

2000.33

>>> decimal.getcontext().prec = 2

>>> pay = decimal.decimal(str(1999 + 1.33))

>>> pay

decimal('2000.33')

>>>

python 2.6及之後的版本,可使用上下文管理器語句來重新設定臨時精度。和前面比較起來,優點在於:在語句退出後,精度又重新設定為初始值。

>>> import decimal

>>> decimal.decimal("1.00") / decimal.decimal("3.00")

decimal('0.33333333')

>>> with decimal.localcontext() as ctx: # 上下文管理器

... ctx.prec = 2

... decimal.decimal("1.00") / decimal.decimal("3.00")

decimal('0.33')

>>> decimal.decimal("1.00") / decimal.decimal("3.00") # 設定完不影響後面設定

decimal('0.33333333')

>>>

關於Python中小資料池的理解

1 首先理解 is 和 的區別 python中的物件可以理解為包括以下幾個要素 id 身份標識 type 資料型別 value 資料值 is和 的區別就是 is 比較的是資料的id值,也就意味著只要 a is b true 的話,a和b指向的是同乙個物件 比較的是資料的value值。2 塊與 塊的快...

JavaScript中小數的處理

我的方案是轉換為字串來進行處理,因為直接計算小數與任何數相乘 比如整數,小數 瀏覽器會計算不精確,出現一大段小數的問題 比如 img 具體方案課參考這段 計算小數點位置 function decimalplaces n else else if indexpoint 1 未採用科學計數法 並且有小數...

js中小數取整

以前我習慣性使用parseint做取整,後來發現乙個問題,對科學計數法不適用 js取整的方法 1.parseint parseint把小數轉化成整數是從要取整數據的左邊讀取,遇到非數字結束,保留前面已讀到的數字。當我們遇到科學計數法,使用parse取值可能是錯誤的 大部分來說是錯誤的 2.math ...