- ベストアンサー
1.4なのに
C言語で int Ans; Ans = 180 * 1.4; と計算すると251になるんですけど。 なんでですか? 1.4のところにカーソルを合わせると 1.4=1.399999999999と表示されるのですけど なんでですか? 対策方法ご存知の方教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
プログラムには誤差が生じます. それが原因です. 1度検索エンジンで「丸め」と記述して検索をかけてみてください. いろいろのっています. わたしは,自分でプログラム(小数第3位を丸め込んだり,四捨五入したり…)を組んでいます.
その他の回答 (2)
- sha-girl
- ベストアンサー率52% (430/816)
回答No.3
int Ans; int a = 180; double b = 1.4; Ans = (int)((double)a * b); 実際にはこのようにキャストされています。 対策方法というか、何故そうなるのかを理解したほうが良いと思います。 「キャスト」「浮動小数点」「IEEE754」 あたりのキーワードを調べてみてください。 double→intの場合、小数部が切り捨てられる為 251.999999999999999 が 251になります。
- Aruku-20030515
- ベストアンサー率23% (362/1544)
回答No.2
C言語の int型はどの範囲までの情報を確保できるか調べてみましょう。