通过' 1/2'之间的差异和str(1/2)到decimal.Decimal在python中

时间:2018-02-05 10:45:03

标签: python string decimal

当我遇到这个疑问时,我正在学习python中的十进制类型

str(1/2)传递给 decimal.Decimal()会返回十进制(' 0.5')

>>>import decimal
>>>decimal.Decimal(str(1/2))
>>>Decimal('0.5')

但是当我通过' 1/2'作为参数,它返回错误:

>>>import decimal
>>> decimal.Decimal('1/2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]

任何人都可以解释一下这背后的原因吗?

提前致谢

3 个答案:

答案 0 :(得分:2)

当您将str(1/2)评估为str(0.5)然后评估为'0.5'时。在第二个示例中,传递字符串'1/2'会返回错误,因为初始化Decimal类的实例时不支持对表达式求值。

答案 1 :(得分:0)

str(1/2)在编译期间被计算为float(0.5),早在它被传递给Decimal()构造函数(它需要浮点数或float的字符串表示形式)之前。我没有尝试评估传递给它的字符串。

答案 2 :(得分:0)

关键是,当您将1/2传递给str()时,会计算出来。因此str(1/2)使str(0.5) 绝对没有区别

所以问题转为decimal.Decimal('0.5')decimal.Decimal('1/2')。初始化Decimal的实例时,表达式应该可以转换为float。当然,字符串1/2不是这样的:float('1/2')给出了ValueError。