如何为 Class 设置小数上下文的精度(Python 使用小数模块)

How to set the precision of a decimal context for a Class (Python using the decimal module)

我正在使用 decimal module 并希望将 Class 的上下文设置为特定精度。

import decimal
from decimal import Decimal

ctx = decimal.getcontext()
ctx.prec = 6

class MyClass:
    def __init__(self, id: str, int_val: int, float_val: float):
        self.id = id
        self.int_val = int_val
        self.float_val = Decimal(float_val)

    def __str__(self) -> str:
           return f"ID: {self.id}, Integer value: {self.int_val}, Float value: {self.float_val}\n"


if __name__ == "__main__":
    obj = MyClass('001', 42, 304.00006)
    print(obj)

以上给出:

ID: 001, Integer value: 42, Float value: 304.00006000000001904481905512511730194091796875

然而,我希望得到

ID: 001, Integer value: 42, Float value: 304.000 # i.e. precision of 6

更仔细地阅读了 decimal module documentation 之后,其中指出:

prec is an integer in the range [1, MAX_PREC] that sets the precision for arithmetic operations in the context.

换句话说,上下文的prec属性控制保持的精度 对于 作为算术结果创建的新值。字面值按照描述进行维护。

因此,将构造函数更改为初始化 float_val 作为简单算术的结果就达到了目的:

self.float_val = Decimal(float_val) * 1

强制执行精度和 returns 所需的结果:

ID: 001, Integer value: 42, Float value: 304.000