zeraora.math
此模块提供了二进制小数、十进制小数、进位制相关的函数与常量。
ZERO
值为 0 的 Decimal 类型小数。
如需控制运算结果的最少小数位数,应另行定义一个值如 Decimal('0.00') 的常量。
ONE
值为 1 的 Decimal 类型小数。
如需控制运算结果的最少小数位数,应另行定义一个值如 Decimal('1.00') 的常量。
bitstream(integer)
获取一个整数 integer 的所有比特位,以生成器的方式从 低位 到 高位 返回。
python
from zeraora.math import bitstream
print(list(bitstream(67)))
# [1, 2, 64]
print(list(bitstream(-43)))
# [-1, -2, -8, -32]
print(list(bitstream(0)))
# []digitstream(integer, base)
获取一个非负整数 integer 在 base 进制下的各位数码,以生成器的方式从 低位 到 高位 返回。
TIP
- 每一个数码都以十进制表达,需要另外使用字符集进行转换。
- 生成器无法直接反转顺序,建议调用者处理好生成结果后再取出对象、进行反转。
python
from zeraora.math import digitstream
digits = digitstream(1008612, 16)
mapper = '0123456789abcdef'.__getitem__
print(''.join(map(mapper, digits))[::-1])
# 'f63e4'
print(hex(1008612))
# '0xf63e4'remove_exponent(d)
去除十进制小数的尾导零。
此函数摘录自 Decimal 常见问题,仅出于方便使用而摘录。
decimalize(d, max_digits=12, decimal_places=2)
将小数(不含小数点)的总长度控制在 max_digits 位,小数位数控制在 decimal_places 位,多余的小数部分将被直接丢弃,不会执行舍入。参数 d 支持传入 str、int、float 或 Decimal 对象。
fsum(iterable, *numbers, start=ZERO, ndigits=2)
针对浮点数的精确求和。
求出可迭代对象 iterable 和位置参数 numbers 中所有数值的总和,并与起始值 start 相加,最后以 Decimal 类型返回。
- 数值支持
float和int类型,但 start 必须是Decimal类型。 - 起始值 start 默认是
Decimal(0)。 - 所有数值在汇总前都会转换为
Decimal并四舍五入到小数点后 ndigits 位。