Python十进制数学计算模块decimal
Python提供了decimal模块用于十进制数学计算,它具有以下特点:
- 提供十进制数据类型,并且存储为十进制数序列;
- 有界精度:用于存储数字的位数是固定的,可以通过decimal.getcontext().prec=x 来设定,不同的数字可以有不同的精度
- 浮点:十进制小数点的位置不固定(但位数是固定的)
decimal的构建:
可以通过整数、字符串或者元组构建decimal.Decimal,对于浮点数需要先将其转换为字符串
decimal的context:
decimal在一个独立的context下工作,可以通过getcontext来获取当前环境。例如前面提到的可以通过decimal.getcontext().prec来设定小数点精度(默认为28):
1 2 3 4 5 6 7 | >>> from decimal import Decimal as D >>> from decimal import getcontext >>> getcontext() Context(prec = 6 , rounding = ROUND_HALF_EVEN, Emin = - 999999999 , Emax = 999999999 , capitals = 1 , flags = [Rounded, Inexact], traps = [DivisionByZero, InvalidOperation, Overflow]) >>> getcontext().prec = 6 >>> D( 1 ) / D( 3 ) Decimal( '0.333333' ) |
decimal和float性能对比:
1 2 | $: python -mtimeit -s 'from decimal import Decimal as D' 'D("1.2")+D("3.4")' $: python -mtimeit -s 'from decimal import Decimal as D' '1.2+3.4' |
我在虚拟机中测试前者耗时是后者的1.7k倍,但这在某些运算(例如财务运算)中是值得的,但如果要对非整数做上百次的运算,应坚持使用float。
转载请注明出处:http://www.cnblogs.com/moinmoin/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
· .NET 阻止Windows关机以及阻止失败的一些原因
· 博客园2025新款「AI繁忙」系列T恤上架
· Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· C# LINQ 快速入门实战指南,建议收藏学习!