Python 任意数字到非科学字符串
Posted
技术标签:
【中文标题】Python 任意数字到非科学字符串【英文标题】:Python any number to non-scientific string 【发布时间】:2014-03-27 19:07:00 【问题描述】:我想在 python 中有一个函数,它可以处理从非常大到非常小的各种数字,甚至是小数点右边的小数(见下面的代码)。我需要将数字转换为字符串并删除它可能具有的任何科学记数法。我还需要删除小数点右侧的尾随零。这是迄今为止我所拥有的最接近的解决方案,它适用于大多数数字,但并非如您所见。
是否有任何改进可以支持麻烦的数字?
def number2string(a):
b = '0:.15f'.format(a)
b = b.rstrip('0') # remove trailing zeros right of decimal
b = b.rstrip('.') # remove trailing decimal if exists
print a,"->",b
number2string(3)
number2string(3.14)
number2string(3.14E+12)
number2string(3.14e-7)
number2string(1234567.007)
number2string(12345678901234567890)
number2string(.00000000000000123)
结果:
3 -> 3
3.14 -> 3.14
3.14e+12 -> 3140000000000
3.14e-07 -> 0.000000314
1234567.007 -> 1234567.006999999983236
12345678901234567890 -> 12345678901234567168
1.23e-15 -> 0.000000000000001
【问题讨论】:
你看过十进制模块吗? 我试过了,但是看不到如何应用和解决上面的问题 哪些麻烦的数字不适用于您的函数? 上面最后3个例子:) 最后一个不起作用的原因是您将一个17位数字截断为15位数字。 15 位数是硬性规定吗? 【参考方案1】:from decimal import Decimal
def number2string(a):
b = format(Decimal(str(a)).normalize(), 'f')
print a,"->",b
【讨论】:
我还不明白代码,但是哇....完美运行。令我惊讶的是,原来的问题存在于 python 中,但幸运的是,我知道 python 中会有解决方案......谢谢 Yuriy Kovalev!以上是关于Python 任意数字到非科学字符串的主要内容,如果未能解决你的问题,请参考以下文章