我想将一个数字转换为一个字符串,使其只显示一定数量的有效数字,而没有多余的零。以下是某些所需输入/输出的示例,假设我想要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'
是否可以操纵其中一个现有格式化程序的行为来执行此操作?
答案 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的答案类似,但不是单行,并根据您的样本输出您想要的内容。