代码之家  ›  专栏  ›  技术社区  ›  panofish

Python将任意数字转换为非科学字符串

  •  1
  • panofish  · 技术社区  · 12 年前

    我想在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 回复  |  直到 12 年前
        1
  •  7
  •   Yuriy Kovalev    12 年前
    from decimal import Decimal
    
    def number2string(a):
        b = format(Decimal(str(a)).normalize(), 'f')
        print a,"->",b