仅在Python中打印有效数字

时间:2014-08-21 12:58:04

标签: python floating-point decimal

给出这个简单的python脚本:

import sys, math

for i in range(1, len(sys.argv)):
    num = float(sys.argv[i])
    print('sin(%f) = %f' % (num, math.sin(num)))

使用以下参数运行:

  

python hw2a.py 1.4 -0.1 4 99

我想要这个输出:

sin(1.4)=0.98545
sin(-0.1)=-0.0998334
sin(4)=-0.756802
sin(99)=-0.999207

然而,当我运行它时,我会在小数点和有效数字后面得到很多无关紧要的数字(好吧,零)。我知道我可以使用例如%.3f来指定固定的小数位数,但是如何让它打印小数点后面的所有数字,直到没有有效数字?

提前致谢!

3 个答案:

答案 0 :(得分:4)

您可以使用%g格式化

In [16]: a = [1.4, -0.1, 4, 99]

In [18]: for num in a:
    ...:     print('sin(%g) = %g' % (num, math.sin(num)))
    ...:     
sin(-0.1) = -0.0998334
sin(4) = -0.756802
sin(99) = -0.999207

答案 1 :(得分:2)

使用sys.argv[i],无需将i转换为浮点数并返回字符串,g格式化:

import sys, math

for i in range(1, len(sys.argv)):
    num = float(sys.argv[i])
    print "sin({}) = {:g}".format(sys.argv[i],math.sin(num))

python foo.py 1.4 -0.1 4 99
sin(1.4) = 0.98545
sin(-0.1) = -0.0998334
sin(4) = -0.756802
sin(99) = -0.999207

如果没有像@mhawke建议的那样手动输入数据,您可以使用:

print "sin({:g}) = {:g}".format(num, math.sin(num))

答案 2 :(得分:0)

您可以使用rstrip删除最后的零。

def without_trailing_zeroes(f):
    return str(float(f)).rstrip('0').rstrip('.')

print without_trailing_zeroes(0.1234000)
0.1234