跳转至

Python decimal 模块

约 292 个字 17 行代码 预计阅读时间 1 分钟

带精度的十进制小数。

Decimal

导入

from decimal import Decimal

创建

Decimal(23)
Decimal('1.3847')
根据整数、字符串创建 Decimal 对象。

浮点数不建议这么做,因为本身不准确。

1
2
3
Decimal.from_float(0.23860)

# Decimal('0.2386000000000000065281113847959204576909542083740234375')

根据浮点数创建 Decimal 对象。

设置显示的有效数字

1
2
3
4
5
6
from decimal import getcontext

getcontext().prec = 6
Decimal(1)/Decimal(7)

# Decimal('0.142857')

保留小数位

1
2
3
import decimal
decimal.Decimal('50.5679').quantize(decimal.Decimal('0.00'))
# decimal.Decimal('50.57')

四舍五入。

decimal.Decimal('50.5329').quantize(decimal.Decimal('0.0'), decimal.ROUND_UP)
# decimal.Decimal('50.6')

进一。

参数如下(略掉decimal.):

  • 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 取整