【问题标题】:Python any number to non-scientific stringPython 任意数字到非科学字符串
【发布时间】: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 位数是硬性规定吗?

标签: python string numbers scientific-notation


【解决方案1】:
from decimal import Decimal

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

【讨论】:

  • 我还不明白代码,但是哇....完美运行。令我惊讶的是,原来的问题存在于 python 中,但幸运的是,我知道 python 中会有解决方案......谢谢 Yuriy Kovalev!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2014-07-01
  • 1970-01-01
  • 2016-12-24
  • 2021-06-21
相关资源
最近更新 更多