我正在寻找一种方法来告诉awk在替换操作中执行高精度算术。这涉及从文件中读取字段,并以该值的1%增量替换它。但是,我在那里失去了精度。这是问题的简化重现:
$ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {print}'
0.546748
在这里,十进制精度后我有16位数字,但是awk仅给出6位数字。使用printf,我得到相同的结果:
$ echo 0.4970436865354813 | awk '{gsub($1, $1*1.1)}; {printf("%.16G\n", $1)}'
0.546748
关于如何获得所需精度的任何建议?
也许awk具有更高的分辨率,但这只是您的输出格式被截断了。使用printf。
—
dubiousjim 2012年
使用printf后结果值无变化。问题已相应编辑。
—
mkc 2012年
正如@manatwork指出的那样,这
—
2012年
gsub
是不必要的。问题是gsub
对字符串有效,而不是数字有效,因此首先使用进行转换CONVFMT
,其默认值为%.6g
。
@ jw013,正如我在问题中提到的那样,我最初的问题需要gsub,因为我需要用1%的增量替换数字。同意,在简化示例中,它不是必需的。
—
mkc 2012年