Python任何数字到非科学字符串

时间:2014-03-27 19:07:01

标签: python string numbers scientific-notation

我想在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

1 个答案:

答案 0 :(得分:7)

from decimal import Decimal

def number2string(a):
    b = format(Decimal(str(a)).normalize(), 'f')
    print a,"->",b