awkで2つの数字を比較するには?

awkで2つの数字を比較するには?

この例はうまくいきます:

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

2番目の例では、比較される数値が異なります。なぜ「等しくない」が印刷されないのですか?

ベストアンサー1

awk 数値の精度限界に達しました。

比較を文字列比較として強制できます。

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

(ここで空の文字列に関連付けると、数値ではなく文字列として扱われます。)

数値比較を実行するには、bcなどの任意の精度の数値を処理できるツールを使用する必要がありますpython

おすすめ記事