浮点字符串格式

时间:2016-10-19 15:00:48

标签: python

我想将一个数字转换为一个字符串,使其只显示一定数量的有效数字,而没有多余的零。以下是某些所需输入/输出的示例,假设我想要5位有效数字:

0.0000123456789 > 1.2346e-5
0.00123456789 > 1.2346e-3
0.123456789 > 1.2346e-1
1.23456789 > 1.2346
1234.56789 > 1234.6
1234567.89 > 1.2346e6

字符串格式化g选项(https://docs.python.org/2/library/string.html#format-specification-mini-language)非常接近,但它的行为并不是我想要的小于1的数字,而不是很多< / em>小于1:

"{:.5g}".format(0.000123456789) # returns '0.00012346', I want '1.2346e-4'

是否可以操纵其中一个现有格式化程序的行为来执行此操作?

3 个答案:

答案 0 :(得分:2)

'{:.4g}'.format(float(input)) if x<=1000 or x>=.0001 else '{:.4e}'.format(float(input))

答案 1 :(得分:1)

你几乎就在那里,你只需要e,而不是g

"{:.5g}".format(0.000123456789)
# '1.23457e-04'

虽然格式字符串中的数字表示小数点的数量,但您需要4(加上小数点左边的一位数字):

"{:.4e}".format(0.000123456789)
'1.2346e-04'

答案 2 :(得分:0)

if 1 <= x <10000:
    print '{:.5g}'.format(x)

elif 1 > x  or x >= 10000:
    print '{:.4e}'.format(x)

与A.Kot的答案类似,但不是单行,并根据您的样本输出您想要的内容。