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

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

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

#1

投稿記事 by Jimmy » 12年前

C言語初心者です。

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

nil
記事: 428
登録日時: 12年前

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

#2

投稿記事 by nil » 12年前

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

Jimmy

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

#3

投稿記事 by Jimmy » 12年前

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

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

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

#4

投稿記事 by Dixq (管理人) » 12年前

それは整数型の計算特性上、この場合数学的に正しくない計算結果になるというだけで、もちろん数学的にはGoogleの計算結果の方が正しいのですから特に不思議ではないかと思います。電卓で計算したらGoogleの検索結果と同じになるはずです

Ryo

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

#5

投稿記事 by Ryo » 12年前

Windows7なら、OSについてくる電卓に「プログラマ」モードがあります(メニュー表示>プログラマ)

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

Jimmy

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

#6

投稿記事 by Jimmy » 12年前

色々とありがとうございます!

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

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

閉鎖

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