decimal 模块使用方法详解

Python decimal 模块使用方法详解

  1. 模块导入与基本创建

    • 导入模块:
      from decimal import Decimal, getcontext
      
    • 创建 Decimal 对象:
      • 推荐使用字符串初始化以避免浮点数精度问题:
        price = Decimal('19.99')  正确
        不推荐使用浮点数初始化:Decimal(0.1)  实际值为 0.1000000000000000055511151231257827021181583404541015625
        
      • 其他创建方式:
        d1 = Decimal(10)          从整数创建
        d2 = Decimal('3.14')      从字符串创建
        d3 = Decimal((0, (3, 1, 4), -2))  从元组创建
        
  2. 精度与上下文设置

    • 获取当前上下文:
      ctx = getcontext()  获取当前上下文对象
      print(ctx)  输出当前上下文配置
      
    • 设置精度:
      ctx.prec = 6  设置精度为6位有效数字
      
    • 舍入模式:
      ctx.rounding = 'ROUND_HALF_UP'  设置四舍五入模式
      
  3. 数学运算与舍入

    • 基本运算:
      total = Decimal('19.99') * Decimal('3')  结果为 Decimal('59.97')
      
    • 舍入操作:
      tax = (Decimal('12.99') * Decimal('0.0875')).quantize(Decimal('0.00'), rounding='ROUND_HALF_UP')
      结果为 Decimal('1.12')
      
    • 四舍五入模式:
      • ROUND_HALF_UP:四舍五入
      • ROUND_DOWN:直接截断
      • ROUND_HALF_EVEN:银行家舍入(偶数舍入)
      • 示例:
        x = Decimal('-3.1415926535')
        print(x.quantize(Decimal('1.0000'), rounding='ROUND_HALF_EVEN'))  输出 -3.1416
        
  4. 注意事项

    • 浮点数转换:
      c = Decimal.from_float(22.222)  精确转换浮点数
      
    • 字符串初始化:
      d = Decimal('0.1')  精确存储 0.1
      
    • 性能与精度权衡:
      高精度计算会带来性能损失,需根据应用场景权衡。
  5. 示例代码

    from decimal import Decimal, getcontext
    
    设置上下文
    ctx = getcontext()
    ctx.prec = 4
    ctx.rounding = 'ROUND_HALF_UP'
    
    创建 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')
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 4,808评论 0 6
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 1,051评论 1 2
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 1,414评论 0 0
  • 跟随樊老师和伙伴们一起学习心理知识提升自已,已经有三个月有余了,这一段时间因为天气的原因休课,顺便整理一下之前学习...
    学习思考行动阅读 893评论 0 2
  • 一脸愤怒的她躺在了床上,好几次甩开了他抱过来的双手,到最后还坚决的翻了个身,只留给他一个冷漠的背影。 多次尝试抱她...
    海边的蓝兔子阅读 945评论 1 4

友情链接更多精彩内容