ページ 1 / 1
doubleをintに
Posted: 2013年4月24日(水) 18:26
by たく
初歩的な質問ですが
#include <stdio.h>
void main(){
double a = 33.3;
int b;
b = (int)(a * 100);
printf("%d\n",b);
}
これを実行すると 3329 になります。
てっきり 3300とばかり思ってましたが、これはなぜでしょうか?
3300にするにはどうすれば良いですか?
よろしく、お願い致します。
Re: doubleをintに
Posted: 2013年4月24日(水) 19:02
by だんごさん
わざわざint型にいれずに100倍したdouble型を出力するのはダメですか?
携帯からなので試してませんが…
Re: doubleをintに
Posted: 2013年4月24日(水) 19:02
by ホヅミ
変数aをint型にしたものを100倍してみてはいかがでしょうか?
b = (int)a * 100;
Re: doubleをintに
Posted: 2013年4月24日(水) 19:47
by box
このとき、aの値は「厳密に」33.3になるわけではありません。
浮動小数点数を有限のメモリーに格納する際、どうしても誤差が生じます。
おそらく、33.3よりもほんの少しだけ小さい、33.29999... という値になっているのでありましょう。
これを100倍すると、3329.999...
int型にキャストするときに小数点以下を切り捨てて3329
Re: doubleをintに
Posted: 2013年4月24日(水) 21:26
by みけCAT
EPSと呼ばれる小さな値を使うといいかもしれません。
コード:
#include <stdio.h>
#define EPS (1e-8)
int main(void) {
double a = 33.3;
int b;
b = (int)(a * 100 + EPS);
printf("%d\n",b);
return 0;
}
と思ったらダメでした。このコードだと3330になってしまいます。
なぜ3300にしたいのでしょうか?
Re: doubleをintに
Posted: 2013年4月25日(木) 16:25
by たく
すいません。
私の書き間違いでした。
3330 が正解です。
ですので、みけCATさんのおっしゃるやり方でもOKです。 ありがとうございました。
また、3329になってしまう理由が良く分かりました。
みなさま、ありがとうございました。