当前位置:  开发笔记 > 编程语言 > 正文

Python浮动到十进制转换

如何解决《Python浮动到十进制转换》经验,为你挑选了3个好方法。

Python Decimal不支持从float构造; 它希望你必须先将float转换为字符串.

这非常不方便,因为浮点数的标准字符串格式化程序要求您指定小数位数而不是重要位置.因此,如果你有一个数字,可能有多达15个小数位,你需要格式化为十进制(""%.15f"%my_float),如果你之前也有任何有效数字,这将给你15位小数的垃圾小数.

有人建议一个很好的方法从用户输入的浮点数转换为十进制保留值,可能会限制可支持的有效位数吗?



1> jfs..:

Python <2.7

"%.15g" % f

或者在Python 3.0中:

format(f, ".15g")

Python 2.7 +,3.2 +

只需将float Decimal直接传递给构造函数,如下所示:

from decimal import Decimal
Decimal(f)


不要忘记包括:从十进制导入十进制并使用d =十进制转换(f)

2> nosklo..:

你在问题中说:

当用户输入时,有人可以建议一种从浮点数转换为十进制保留值的好方法

但每次用户输入值时,都会以字符串形式输入,而不是以浮点形式输入.你正在把它转换成某个浮点数.直接将其转换为十进制,不会丢失任何精度.


然后你已经失去了"用户输入的价值",你无法取回它.你所能做的只是应用任意四舍五入和希望.Python对Decimal的处理正确地引起了你的注意,所以你现在就能理解这个问题而不是后来得到一个奇怪的bug.
@Kozyarchuk:我知道您说过您不能更改架构,但是您可能要考虑将其更改为十进制类型(在某些时候),因为将来这会变得更加令人头疼。

3> 小智..:

我建议这个

>>> a = 2.111111
>>> a
2.1111110000000002
>>> str(a)
'2.111111'
>>> decimal.Decimal(str(a))
Decimal('2.111111')


这种方法给出了最明智的结果。按照Sebastian的答案直接在浮点数附近构造一个Decimal可以在Python 2.7中产生令人惊讶的结果。好吧,如果您以前玩过花车,一点也不奇怪...
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有