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 任意数字到非科学字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python基础之:数字字符串和列表

Python 学习之路 :基础

如何从PowerShell命令行转义管道字符以传递到非PowerShell命令

正则表达式

02python_数据类型

Python系列Python写csv文件长数字变成科学记数法的解决方案