当我遇到这个疑问时,我正在学习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'>]
任何人都可以解释一下这背后的原因吗?
提前致谢
答案 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。