如何为 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
我正在使用 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