为什么 Python getcontext().prec = 4 有时会给出 3 位小数而不是 4 位小数?
Why Python getcontext().prec = 4 sometimes gives 3 decimals instead of 4?
我是 python 的新手,在我的新旅程中我使用 decimal
模块遇到了这个问题:
>>> getcontext().prec = 4; print(Decimal(7)/Decimal(9));
0.7778 # everything ok
>>>
>>> getcontext().prec = 4; print(Decimal(2).sqrt());
1.414 # why 3 and not 4?
>>>
>>> getcontext().prec = 10;
>>> print(Decimal(10).log10()/Decimal(2).log10());
3.321928094 # why 9 if precision is set to 10?
从 https://docs.python.org/2/library/decimal.html 中查找,我没有找到关于此的提及。
为什么会这样?
感谢关注!
猜一猜:是有效位数:第二个和第三个例子小数点前也有一个数字(第一个例子中的0不重要)
请注意,文档中的第四个项目符号表示:
The decimal module incorporates a notion of significant places so that
1.30 + 1.20 is 2.50.
比较(使用您的第一个示例,但数字更大):
>>> getcontext().prec = 8
>>> print Decimal(7000)/Decimal(9)
777.77778
>>> getcontext().prec = 4
>>> print Decimal(7000)/Decimal(9)
777.8
>>> getcontext().prec = 2
>>> print Decimal(7000)/Decimal(9)
7.8E+2
遗憾的是,文档中的大多数示例仅限于 1 阶的数字,因此显示不清晰。
我是 python 的新手,在我的新旅程中我使用 decimal
模块遇到了这个问题:
>>> getcontext().prec = 4; print(Decimal(7)/Decimal(9));
0.7778 # everything ok
>>>
>>> getcontext().prec = 4; print(Decimal(2).sqrt());
1.414 # why 3 and not 4?
>>>
>>> getcontext().prec = 10;
>>> print(Decimal(10).log10()/Decimal(2).log10());
3.321928094 # why 9 if precision is set to 10?
从 https://docs.python.org/2/library/decimal.html 中查找,我没有找到关于此的提及。
为什么会这样?
感谢关注!
猜一猜:是有效位数:第二个和第三个例子小数点前也有一个数字(第一个例子中的0不重要)
请注意,文档中的第四个项目符号表示:
The decimal module incorporates a notion of significant places so that 1.30 + 1.20 is 2.50.
比较(使用您的第一个示例,但数字更大):
>>> getcontext().prec = 8
>>> print Decimal(7000)/Decimal(9)
777.77778
>>> getcontext().prec = 4
>>> print Decimal(7000)/Decimal(9)
777.8
>>> getcontext().prec = 2
>>> print Decimal(7000)/Decimal(9)
7.8E+2
遗憾的是,文档中的大多数示例仅限于 1 阶的数字,因此显示不清晰。