ページ 11

printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。

Posted: 2012年8月10日(金) 18:46
by Jimmy
C言語初心者です。

printf("%d\n",X / 4 * 100);
変数Xには数値の2が入ってます。この実行結果が0になってしまいます。求めている答えは50です。%fに変えてもダメでした。何がいけないのか教えてください。

Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。

Posted: 2012年8月10日(金) 18:57
by nil
int型の演算の場合小数点以下は切り捨てられるため
意図的に小数点以下を切り捨てたいとき以外は
割り算を最後に行うのが普通です
[追記]
今回の場合剰余算のみのため
計算は左から順番に行われます。
2/4=0.5切り捨てで0、*100 = 0です

Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。

Posted: 2012年8月10日(金) 19:02
by Jimmy
涼雅 さんが書きました:int型の演算の場合小数点以下は切り捨てられるため
意図的に小数点以下を切り捨てたいとき以外は
割り算を最後に行うのが普通です
[追記]
今回の場合剰余算のみのため
計算は左から順番に行われます。
2/4=0.5切り捨てで0、*100 = 0です
という事は、printf("%d\n",100 * X/4);にして実行すればいいという事ですか・・・。ありがとうございます助かります。でも、Googleで 「2 / 4 * 100」と検索すれば50ってなりますね。

Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。

Posted: 2012年8月10日(金) 19:28
by Dixq (管理人)
それは整数型の計算特性上、この場合数学的に正しくない計算結果になるというだけで、もちろん数学的にはGoogleの計算結果の方が正しいのですから特に不思議ではないかと思います。電卓で計算したらGoogleの検索結果と同じになるはずです

Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。

Posted: 2012年8月10日(金) 19:37
by Ryo
Windows7なら、OSについてくる電卓に「プログラマ」モードがあります(メニュー表示>プログラマ)

これで、「2 /  4  * 100」をやってみると、実感できます(「*」を押したところで)

Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。

Posted: 2012年8月11日(土) 16:15
by Jimmy
色々とありがとうございます!

整数型で計算する影響で、小数点を切り捨てるためこのような現象が起こることはお蔭様でしっかりと認識できました。

Windows7の電卓のプログラマモードやってみました!(親のを借りて)
アスタリスクを押した瞬間0になってしまいますね。便利な機能教えてくださり感謝しています。