awk读取浮点精度:无法读取小浮点数,例如4E-320

时间:2015-07-22 16:50:27

标签: bash awk floating-point floating-point-precision gawk

我无法让gawk4 3e-20 4.5e-320 3 1e-10 以科学计数法读取小浮点数并将其正确解释为浮点数。

我只想用awk输出一个小于阈值的数字。

示例

考虑以下输入:

echo -e "4\n3e-20\n4.5e-320\n3\n1e-10"  |  awk '$1 > 1e-15'

我希望以1e-15为阈值,所以我执行以下操作:

4
4.5e-320
3
1e-10

给出输出:

awk

当然,4.5e-320未通过1e-15阈值,但gawk(g)awk未能拒绝它!

我查了awk '$1 > 1e-15'浮点精度。它似乎只将 应用于 awk中的算术运算

因此,将gawk -v PREC="double" '$1 > 1e-15'替换为PREC="quad"也会失败。它也因(g)awk

而失败

因此,我得出结论,people_controller#person_params不是读取 4.5e-320作为浮点数,而是一个字符串?

1 个答案:

答案 0 :(得分:2)

我从awk版本3.1.5获得预期的输出。

我从awk 3.1.7版获得你的输出。

您可以强制awk通过向其添加零来将字符串转换为数字。

所以请尝试使用这个awk脚本:

printf '4\n3e-20\n4.5e-320\n3\n1e-10\n' | awk '$1+0 > 1e-15'