Skip to content

zeraora.math

此模块提供了二进制小数、十进制小数、进位制相关的函数与常量。

ZERO

值为 0Decimal 类型小数。

如需控制运算结果的最少小数位数,应另行定义一个值如 Decimal('0.00') 的常量。

ONE

值为 1Decimal 类型小数。

如需控制运算结果的最少小数位数,应另行定义一个值如 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)

获取一个非负整数 integerbase 进制下的各位数码,以生成器的方式从 低位高位 返回。

TIP

  1. 每一个数码都以十进制表达,需要另外使用字符集进行转换。
  2. 生成器无法直接反转顺序,建议调用者处理好生成结果后再取出对象、进行反转。
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 支持传入 strintfloatDecimal 对象。

fsum(iterable, *numbers, start=ZERO, ndigits=2)

针对浮点数的精确求和。

求出可迭代对象 iterable 和位置参数 numbers 中所有数值的总和,并与起始值 start 相加,最后以 Decimal 类型返回。

  • 数值支持 floatint 类型,但 start 必须是 Decimal 类型。
  • 起始值 start 默认是 Decimal(0)
  • 所有数值在汇总前都会转换为 Decimal 并四舍五入到小数点后 ndigits 位。