Python如何将科学计数法表示的极小浮点数保留3位小数输出
问题根因
之前用{:.2f}格式化得到0.000000J,是误用了定点小数格式化规则:带f后缀的格式化语法会把数字按普通十进制展开展示,而波能量的计算结果是量级在1e-19的极小值,整数部分、小数点后前18位全为0,哪怕保留2位定点小数,展示出来也只会是0.00,完全碰不到真实有意义的数值位。
另外你原修改代码里的str('{:.2f}'.format(E))属于冗余写法,format方法返回的本身就是格式化后的字符串,不需要再套一层str()做类型转换。
调整方法
你想要的「精简科学计数法展示、减少尾数小数位」的效果,需要使用对应科学计数规则的格式化语法,而不是定点格式化:
- 格式化语法
{:.Ne}中,N是你要保留的小数位数,输出会自动按科学计数法(尾数*10^指数)的结构展示,尾数部分保留N位小数。 - 比如你举例的
3.1012e-19J这类4位小数的效果,只需要把格式化符换成{:.4e};如果要保留3位小数,就换成{:.3e}。
修改后的可运行代码:
def FindWaveEnergy(color, lam): c = 3.0E8 V = c/lam h = 6.626E-34 E = h*V # 调整格式化规则,e前的数字直接控制保留的小数位数 print("The energy of the " + color.lower() + " wave is " + '{:.4e}'.format(E) + "J.") FindWaveEnergy("red", 6.60E-7)
运行上述代码的输出为:The energy of the red wave is 3.0118e-19J.
完全符合你想要的精简展示效果,不会出现20多位冗余小数的问题。
可选优化技巧
如果不想手动判断什么时候用定点、什么时候用科学计数,可以用通用有效数字格式化符g:比如{:.4g}会自动根据数值量级选择最易读的展示模式,只保留指定个数的有效数字,不会出现把极小值压成0的低级问题。
内容的提问来源于stack exchange,提问作者Adonis
相关产品推荐
相关产品推荐

