如何在awk中比较两个数字?

如何在awk中比较两个数字?

这个例子运行良好:

awk -v num1=5999 -v num2=5999  'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal

这个例子效果不太好:

awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 'BEGIN{ print (num2==num1) ? "equal" : "not equal" }'
equal

在第二个示例中,比较的数字不同。为什么不打印“不等于”?

答案1

您已达到 awk 数字的精度极限。

您可以强制比较为字符串比较:

awk -v num1=59558711052462309110012 -v num2=59558711052462309110011 '
  BEGIN{ print (num2""==num1) ? "equal" : "not equal" }'

(这里与空字符串的连接强制将它们视为字符串而不是数字)。

如果您想进行数值比较,则必须使用可以处理任意精度数字的工具,例如bcpython

相关内容