decimal 模塊使用方法詳解

Python decimal 模塊使用方法詳解

  1. 模塊導入與基本創(chuàng)建

    • 導入模塊:
      from decimal import Decimal, getcontext
      
    • 創(chuàng)建 Decimal 對象:
      • 推薦使用字符串初始化以避免浮點數(shù)精度問題:
        price = Decimal('19.99')  正確
        不推薦使用浮點數(shù)初始化:Decimal(0.1)  實際值為 0.1000000000000000055511151231257827021181583404541015625
        
      • 其他創(chuàng)建方式:
        d1 = Decimal(10)          從整數(shù)創(chuàng)建
        d2 = Decimal('3.14')      從字符串創(chuàng)建
        d3 = Decimal((0, (3, 1, 4), -2))  從元組創(chuàng)建
        
  2. 精度與上下文設置

    • 獲取當前上下文:
      ctx = getcontext()  獲取當前上下文對象
      print(ctx)  輸出當前上下文配置
      
    • 設置精度:
      ctx.prec = 6  設置精度為6位有效數(shù)字
      
    • 舍入模式:
      ctx.rounding = 'ROUND_HALF_UP'  設置四舍五入模式
      
  3. 數(shù)學運算與舍入

    • 基本運算:
      total = Decimal('19.99') * Decimal('3')  結(jié)果為 Decimal('59.97')
      
    • 舍入操作:
      tax = (Decimal('12.99') * Decimal('0.0875')).quantize(Decimal('0.00'), rounding='ROUND_HALF_UP')
      結(jié)果為 Decimal('1.12')
      
    • 四舍五入模式:
      • ROUND_HALF_UP:四舍五入
      • ROUND_DOWN:直接截斷
      • ROUND_HALF_EVEN:銀行家舍入(偶數(shù)舍入)
      • 示例:
        x = Decimal('-3.1415926535')
        print(x.quantize(Decimal('1.0000'), rounding='ROUND_HALF_EVEN'))  輸出 -3.1416
        
  4. 注意事項

    • 浮點數(shù)轉(zhuǎn)換:
      c = Decimal.from_float(22.222)  精確轉(zhuǎn)換浮點數(shù)
      
    • 字符串初始化:
      d = Decimal('0.1')  精確存儲 0.1
      
    • 性能與精度權(quán)衡:
      高精度計算會帶來性能損失,需根據(jù)應用場景權(quán)衡。
  5. 示例代碼

    from decimal import Decimal, getcontext
    
    設置上下文
    ctx = getcontext()
    ctx.prec = 4
    ctx.rounding = 'ROUND_HALF_UP'
    
    創(chuàng)建 Decimal 對象
    price = Decimal('19.99')
    quantity = Decimal('3')
    total = price * quantity  Decimal('59.97')
    
    舍入操作
    tax_rate = Decimal('0.0875')
    tax = (price * tax_rate).quantize(Decimal('0.00'))  Decimal('1.70')
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • """1.個性化消息: 將用戶的姓名存到一個變量中,并向該用戶顯示一條消息。顯示的消息應非常簡單,如“Hello ...
    她即我命閱讀 5,012評論 0 6
  • 1、expected an indented block 冒號后面是要寫上一定的內(nèi)容的(新手容易遺忘這一點); 縮...
    庵下桃花仙閱讀 1,075評論 1 2
  • 一、工具箱(多種工具共用一個快捷鍵的可同時按【Shift】加此快捷鍵選取)矩形、橢圓選框工具 【M】移動工具 【V...
    墨雅丫閱讀 1,514評論 0 0
  • 跟隨樊老師和伙伴們一起學習心理知識提升自已,已經(jīng)有三個月有余了,這一段時間因為天氣的原因休課,順便整理一下之前學習...
    學習思考行動閱讀 982評論 0 2
  • 一臉憤怒的她躺在了床上,好幾次甩開了他抱過來的雙手,到最后還堅決的翻了個身,只留給他一個冷漠的背影。 多次嘗試抱她...
    海邊的藍兔子閱讀 980評論 1 4

友情鏈接更多精彩內(nèi)容