• ベストアンサー

awk の int()に関数について

数値処理でawkを使い始めているのですが, int関数を使って小数を切り捨てたいのですが, 以下のような現象が起こって困っています。 print int(9.53*100) 952 ? print int(9.53*1000) 9530 OK print int(65.52*1000) 65519 ? print int(65.52*1000.0+0.1) 65520 ? int関数はどういう動作をするのかどなたかご教示いただけますでしょうか。 お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.1

int()は実数値の整数部分だけを取り出す関数です。 合わないのは小数の誤差ですね。コンピューターは2のべき乗の和で表せる数値しか正確に表現できません。べき乗を ^ と書くと。 9.53=2^3+2^0+2^(-1)+2^(-6)+2^(-7)+2^(-8)+2^(-9)… と無限に続き、正確には表せません。無限に続くのを途中で打ち切って10進数で書くと 9.52999999… となります。 したがって、100倍して整数部分をとれば952になります。 解決方法としては、 案1) 小数点以下の値が出てこないように工夫して使う 案2) int(x+0.0000001) のようにする

monohon
質問者

お礼

明快なお答えをありがとうございました! そんな深いこと理由があったのですね。 簡単なCの本には載っていませんでした。 お聞きしなかったら,私には分からなかったと思います。 深く感謝いたします。

すると、全ての回答が全文表示されます。

関連するQ&A