>>> f=1/70对e/f/g都指定精度为3,结果e输出了4位有效数字(3位小数),f输出了3位小数,g输出了3位有效数字。再来一例:
>>> print('%.3e %.3f %.3g' % (f,f,f))
1.429e-02 0.014 0.0143
>>> f=1200000e和f依旧输出3位小数。但g只输出了两位有效数字,是因为再多的有效数字都是结尾的零,为了好看就没有输出。下例也证明了这个说法:
>>> print('%.3e %.3f %.3g' % (f,f,f))
1.200e+06 1200000.000 1.2e+06
>>> f=1.2上面两例中,e和f都忠诚地输出了无用的零,但g却尽可能输出简洁的结果。
>>> print('%.3e %.3f %.3g' % (f,f,f))
1.200e+00 1.200 1.2
f这种输出固定小数位数的方式在某些地方是有用的,比如一系列代表权重的数字,我们希望它们的小数位数一样,这样加起来能够正好等于1。在类似场景中,e也同样适用。g可以给出最清晰的输出,但是不保证输出结果中有效数字位数或者小数位数等于指定的“精度”。
另外,既然格式串能够控制输出小数位数,在程序中就不需要round函数了,这样可以保证计算的精度。只需在输出的时候用格式串来控制小数位数。
上面提了有效数字,想搞清楚有效数字到底是啥含义,却发现维基百科上没有这个条目,顺手创建了有效数字的条目,结果发现我自己也说不清楚 = =。
没有评论:
发表评论