如何在 python 中全局设置小数精度而不总是键入 Decimal()?

How to set the decimal precision globally in python without always typing Decimal()?

要设置小数精度,我可以这样写:

from decimal import Decimal,getcontext;
getcontext().prec = 20

然后使用:

Decimal(some number)

好的。但是每次都写 Decimal 真的很烦人,尤其是当你有很多数字要处理的时候。如何设置 python 使其始终考虑具有指定小数精度的代码中的每个数字?

你真的不应该。 floatDecimal 之间的区别非常重要,您不想向代码的读者隐藏这种区别。

如果您使用大量 Decimal 常量,有些人喜欢这样做:

from decimal import Decimal as D

c0 = D('273.15')
f0 = D('491.67')
c_ms = D('299792485')
# etc.

我偶尔看到的另一个技巧是大量创建常量块:

constants = '''
   273.15 # c0
   491.67 # f0
   299792485 # c_ms
'''
constants = (line.split('#', 1)[0].strip() for line in constants.splitlines())
c0, f0, c_ms = (Decimal(line) for line in constants if line)

如果你真的想推送它,你可以解析出名称并使用 globals()[name] 来设置它们,但这很恶心。

如果你想真正做到极致,你可以编写一个导入挂钩,将每个浮点文字更改为 Decimal 构造函数。 This project 是一个起点,虽然 IIRC 它只适用于 Python 3.3 到 3.5 左右开箱即用。

但实际上,让您的编辑或 IDE 帮助您可能会更好。这使得代码更容易编写,而不会使其更难阅读或产生误导。