Python Decimal不支持从float构造; 它希望你必须先将float转换为字符串.
这非常不方便,因为浮点数的标准字符串格式化程序要求您指定小数位数而不是重要位置.因此,如果你有一个数字,可能有多达15个小数位,你需要格式化为十进制(""%.15f"%my_float),如果你之前也有任何有效数字,这将给你15位小数的垃圾小数.
有人建议一个很好的方法从用户输入的浮点数转换为十进制保留值,可能会限制可支持的有效位数吗?
"%.15g" % f
或者在Python 3.0中:
format(f, ".15g")
只需将float Decimal
直接传递给构造函数,如下所示:
from decimal import Decimal Decimal(f)
你在问题中说:
当用户输入时,有人可以建议一种从浮点数转换为十进制保留值的好方法
但每次用户输入值时,都会以字符串形式输入,而不是以浮点形式输入.你正在把它转换成某个浮点数.直接将其转换为十进制,不会丢失任何精度.
我建议这个
>>> a = 2.111111 >>> a 2.1111110000000002 >>> str(a) '2.111111' >>> decimal.Decimal(str(a)) Decimal('2.111111')