C言語初心者です。
printf("%d\n",X / 4 * 100);
変数Xには数値の2が入ってます。この実行結果が0になってしまいます。求めている答えは50です。%fに変えてもダメでした。何がいけないのか教えてください。
printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。
Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。
int型の演算の場合小数点以下は切り捨てられるため
意図的に小数点以下を切り捨てたいとき以外は
割り算を最後に行うのが普通です
[追記]
今回の場合剰余算のみのため
計算は左から順番に行われます。
2/4=0.5切り捨てで0、*100 = 0です
意図的に小数点以下を切り捨てたいとき以外は
割り算を最後に行うのが普通です
[追記]
今回の場合剰余算のみのため
計算は左から順番に行われます。
2/4=0.5切り捨てで0、*100 = 0です
Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。
という事は、printf("%d\n",100 * X/4);にして実行すればいいという事ですか・・・。ありがとうございます助かります。でも、Googleで 「2 / 4 * 100」と検索すれば50ってなりますね。涼雅 さんが書きました:int型の演算の場合小数点以下は切り捨てられるため
意図的に小数点以下を切り捨てたいとき以外は
割り算を最後に行うのが普通です
[追記]
今回の場合剰余算のみのため
計算は左から順番に行われます。
2/4=0.5切り捨てで0、*100 = 0です
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。
それは整数型の計算特性上、この場合数学的に正しくない計算結果になるというだけで、もちろん数学的にはGoogleの計算結果の方が正しいのですから特に不思議ではないかと思います。電卓で計算したらGoogleの検索結果と同じになるはずです
Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。
Windows7なら、OSについてくる電卓に「プログラマ」モードがあります(メニュー表示>プログラマ)
これで、「2 / 4 * 100」をやってみると、実感できます(「*」を押したところで)
これで、「2 / 4 * 100」をやってみると、実感できます(「*」を押したところで)
Re: printf("%d\n",2 / 4 * 100); を実行すると0と表示せてしまいます。
色々とありがとうございます!
整数型で計算する影響で、小数点を切り捨てるためこのような現象が起こることはお蔭様でしっかりと認識できました。
Windows7の電卓のプログラマモードやってみました!(親のを借りて)
アスタリスクを押した瞬間0になってしまいますね。便利な機能教えてくださり感謝しています。
整数型で計算する影響で、小数点を切り捨てるためこのような現象が起こることはお蔭様でしっかりと認識できました。
Windows7の電卓のプログラマモードやってみました!(親のを借りて)
アスタリスクを押した瞬間0になってしまいますね。便利な機能教えてくださり感謝しています。