doubleをintに

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たく

doubleをintに

#1

投稿記事 by たく » 6年前

初歩的な質問ですが

#include <stdio.h>
void main(){
double a = 33.3;
int b;
b = (int)(a * 100);
printf("%d\n",b);
}

これを実行すると 3329 になります。
てっきり 3300とばかり思ってましたが、これはなぜでしょうか?

3300にするにはどうすれば良いですか?
よろしく、お願い致します。

だんごさん
記事: 273
登録日時: 8年前

Re: doubleをintに

#2

投稿記事 by だんごさん » 6年前

わざわざint型にいれずに100倍したdouble型を出力するのはダメですか?

携帯からなので試してませんが…
 Dango San

ホヅミ
記事: 110
登録日時: 9年前

Re: doubleをintに

#3

投稿記事 by ホヅミ » 6年前

変数aをint型にしたものを100倍してみてはいかがでしょうか?
b = (int)a * 100;

box
記事: 1746
登録日時: 9年前

Re: doubleをintに

#4

投稿記事 by box » 6年前

たく さんが書きました:

コード:

    double a = 33.3;
このとき、aの値は「厳密に」33.3になるわけではありません。
浮動小数点数を有限のメモリーに格納する際、どうしても誤差が生じます。
おそらく、33.3よりもほんの少しだけ小さい、33.29999... という値になっているのでありましょう。
これを100倍すると、3329.999...
int型にキャストするときに小数点以下を切り捨てて3329
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: doubleをintに

#5

投稿記事 by みけCAT » 6年前

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にしたいのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

たく

Re: doubleをintに

#6

投稿記事 by たく » 6年前

すいません。
私の書き間違いでした。
3330 が正解です。

ですので、みけCATさんのおっしゃるやり方でもOKです。 ありがとうございました。

また、3329になってしまう理由が良く分かりました。
みなさま、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る