使用.format格式化shapiro检验结果时出现数值差异的问题排查
两段.format代码输出差异的原因解析
核心问题:占位符索引的误用
两段代码的本质区别在于占位符索引对应参数的方式:
第一段代码是两个独立的格式化操作:
print ('stat = {0:.2f}'.format(stat), 'p = {0:.30f}'.format (p))这里的两个
{0}分别属于两个不同的.format()调用:- 第一个
{0:.2f}对应第一个.format(stat)的第0位参数(即stat) - 第二个
{0:.30f}对应第二个.format(p)的第0位参数(即p)
因此p值能被正确格式化输出。
- 第一个
第二段代码是单个格式化操作,但占位符索引重复使用了
0:print ('stat = {0:.2f}, p = {0:.30f}'.format (stat,p))同一个
.format(stat,p)调用里,所有{0}都会指向参数列表的第0位参数(也就是stat),第二个占位符虽然设置了.30f的格式,但填充的是stat的高精度数值,而非p的值,这就导致输出结果和预期不符。
修正方案
把第二段代码的第二个占位符索引改为1,对应参数列表里的第二个参数p即可:
print ('stat = {0:.2f}, p = {1:.30f}'.format (stat,p))
内容的提问来源于stack exchange,提问作者Green_lantern1
相关产品推荐
相关产品推荐

