在Python中仅打印有效数字

1 投票
2 回答
1650 浏览
提问于 2025-04-18 18:03

给定这个简单的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 来指定固定的小数位数,但我想知道怎么才能让它打印出小数点后所有的数字,直到没有有效数字为止?

提前谢谢你!

2 个回答

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))

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

撰写回答