为什么“getcontext().prec = 2”实际上没有设置它,以便 Decimal() 的使用达到两位小数?

Jay*_*Jay 3 python decimal

我正在编写一个处理货币值的程序,因此我希望它使用小数输出到小数点后两位,不幸的是,这不起作用,并且输出的数字更长。

我在网上查了一下,但到目前为止,似乎没有针对这个特定问题的任何答案,以防在程序的其余部分中发生某些情况,我仅在基本数字上使用它运行了一段测试代码并且发生了相同的结果,因此它不是我的代码的其余部分。下面进行测试。

from decimal import *
getcontext().prec = 2
test = Decimal(5.859)
print(test)
Run Code Online (Sandbox Code Playgroud)

我预计它会打印 5.86 的输出,或者在最坏的情况下,如果它没有按所需方向舍入,至少会打印 5.85。

相反,它打印了。

5.8589999999999999857891452847979962825775146484375
Run Code Online (Sandbox Code Playgroud)

相同的输出,就好像getcontext().prec = 2从未使用过一样

请注意,对 python 还算陌生,所以如果你在没有解释的情况下向我抛出随机代码,请不要假设我会确切地知道你的意思。

Anu*_*ngh 6

根据文档,上下文精度和舍入仅在算术运算期间发挥作用。因此,为了实现您的目标,您可以执行以下操作:

from decimal import *
getcontext().prec = 3
test = Decimal('5.859')/Decimal('1')
print(test)
Run Code Online (Sandbox Code Playgroud)

输出:

Decimal('5.86')
Run Code Online (Sandbox Code Playgroud)

  • 不要将浮点数传递给 Decimal 构造函数! (3认同)
  • 还有[`Context.create_decimal`](https://docs.python.org/3/library/decimal.html#decimal.Context.create_decimal)。 (2认同)