题
蟒蛇小数不支持正在建造从浮子;它预计,你必须转换浮到一串的第一个。
这是非常不方便,因为标准字符串格式,用于浮需要指定数目的小数位,而不是显着的地方。所以如果你有一个数字,可能会有多达15个小地方,你需要的格式,因为小数(""%.15f"%my_float),这将给你垃圾在15小数点后一位,如果您还有任何显着的位之前的十进制。
有人可以建议一个很好的方式来转换浮到保留小数值作为用户已进入,也许是限制性的数量有效数字可以支持?
解决方案
的Python <2.7
"%.15g" % f
或者在Python 3.0:
format(f, ".15g")
的Python 2.7+,3.2 +
只需通过浮子直接Decimal
构造函数,如下所示:
from decimal import Decimal
Decimal(f)
其他提示
您在你的问题说:
有人能提出一个好办法 将从浮到十进制 的保存的值作为用户具有 输入强>
但是,每一个用户输入的值时,它被输入作为一个字符串,而不是一个浮子。你是它的地方转换为浮动。将其转换为十进制,而不是直接和没有精度将会丢失。
我建议此
>>> a = 2.111111
>>> a
2.1111110000000002
>>> str(a)
'2.111111'
>>> decimal.Decimal(str(a))
Decimal('2.111111')
蟒蛇不会支持小数点从创建一个浮动。你只是把它作为一串的第一个。但是精确度的损失不会发生串转换。浮动转换不会有那样的精密中的第一个地方。(否则你就不需要的小数)
我认为混淆这里是 我们可以创造浮文本中的十进制格式, 但尽快翻译消耗,文字内代表权变成一个浮点数。
浮点数的“正式”的字符串表示由再版(给定的)内置:
>>> repr(1.5)
'1.5'
>>> repr(12345.678901234567890123456789)
'12345.678901234567'
可以使用再版(),而不是一个格式化的字符串时,结果将不包含任何不必要的垃圾。
当你说“作为用户进入保值”,为什么不存储用户输入的值作为一个字符串,并传递给十进制构造?
“正确”的方式来做到这一点是在1990年由 Steele和记录白沙 克林杰的PLDI 1990 论文。
不隶属于 StackOverflow