C言語関係掲示板

過去ログ

No.324.明示的キャストについて

[戻る] [ホームページ]
No.2018

明示的キャストについて
投稿者---しいな(2002/07/09 14:39:59)


int a,b;
double c;
c = (double)((a - b) / a) * 100);

このようにしたらcの中は0になってしまいます。これではいけないのでしょうか?

No.2019

Re:明示的キャストについて
投稿者---差猫(2002/07/09 15:33:26)


>int a,b;
>double c;
>c = (double)((a - b) / a) * 100);

これだと、
1.a-b
2.1の計算結果/a
3.2の計算結果*100
4.3の計算結果をdouble型に変換
の順に処理されるので2の割り算の時点で計算結果が切り捨てられてしまいます。
割り算を行う前にキャストする必要があります。



No.2020

Re:明示的キャストについて
投稿者---snow(2002/07/09 15:40:23)


>int a,b;
>double c;
>c = (double)((a - b) / a) * 100);
>
>このようにしたらcの中は0になってしまいます。これではいけないのでしょうか?


ども、snowです。
doubleでキャストする位置を変えれば大丈夫です。

c = (double)((a - b) / a) * 100);

これではaで割られた後の値をdoubeで持つようにしているため、0になってしまいます。
これを

c = ((double)(a - b)/a)*100;

とすればOKです。

No.2022

重複しました
投稿者---snow(2002/07/09 15:50:45)


あぁ、仕事の合間にちんたらやってたら重複してしまいました。
投稿するときは出来るだけリロードかけるようにしてるんですが…
申し訳ないです。



No.2037

Re:明示的キャストについて
投稿者---しいな(2002/07/10 09:07:21)


その通りにしたらちゃんと答えが出ました。理解することが出来ました。Thanks