decimal模塊 --數字的精度、保留小數位數、取整問題


開始之前需要注意一點是:精度值為數字的總位數,如:1.23, 精度值為3; 0.123,精度值也為3

1、更改默認精度值后,直接進行計算即可保留對應精度值

from decimal import getcontext,Decimal

getcontext().prec = 3   #設置精度值為3

f = 12.23435521    #type(f) : float
value = Decimal(str(f))  #value: Decimal('12.23435521')
#或:value = Decimal.from_float(f)
print value*1  #Decimal('12.2')

value = Decimal(1)/Decimal(3)
print value  #Decimal('0.333')

2、小數保留位數問題

from decimal import getcontext,Decimal

f = 12.23435521    #type(f) : float
value = Decimal(repr(f)).quantize(Decimal('0.000'))   #保留3位小數,這里需要注意:在數字的精度值允許的范圍內
print value  #12.234

3、取整問題

 需要記住幾個參數:

  ROUND_CEILING  總是趨向無窮大向上取整

  ROUND_DOWN 總是趨向0取整

  ROUND_FLOOR  總是趨向負無窮大向下取整

  ROUND_HALF_DOWN 如果最后一個有效數字大於或等於5則朝0反方向取整;否則,趨向0取整

  ROUND_HALF_EVEN 類似於ROUND_HALF_DOWN,不過,如果最后一個有效數字值為5,則會檢查前一位。偶數值會導致結果向下取整,奇數值導致結果向上取整

  ROUND_HALF_UP  類似於ROUND_HALF_DOWN,不過如果最后一位有效數字為5,值會朝0的反方向取整

  ROUND_UP 朝0的反方向取整

  ROUND_05UP 如果最后一位是0或5,則朝0的反方向取整;否則向0取整

 寫一個例子:

import decimal
from decimal import getcontext,Decimal

getcontext().prec = 1
getcontext().rounding = getattr(decimal, 'ROUND_CEILING')

value = Decimal(1)/Decimal(8)
print value   # Decimal('0.2') 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM