おめでとう 実数値の数値計算の実行結果を整数値表示にするカールトンさんの問題も解決しました 解その3  %f出力変換指定子の書式設定%.0fをもちいる場合


             ☆おめでとう☆


 実数値の数値計算の実行結果を整数値表示にするカールトンさんの問題も解決しました 解その3  


         ☆%f出力変換指定子の書式設定%.0fをもちいる場合☆



清美「もうひとつ


プログラムの実行結果を


あなたの預金額はただいま10499.999523円です。

から

あなたの預金額はただいま10500円です。


に変更する方法をみつけちゃった てへ。」


聖美

「えっ もう1つ みつけたの!」


清美「実は、みんなもよく知っている方法なんだよ」


聖美「え~そんなの あったっけ?」


聡子「聡子 わかあんんな~い」


#include <stdio.h>


int main(void)

{

float a;

a=1.05;


printf("あなたの預金額はただいま%f円です。\n",10000*a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10499.999523円です。


プログラムの実行結果(Visual Studioの場合)


あなたの預金額はただいま10500.000000円です。



清美「このソースコードをつくりかえて


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10499.999523円です。


を小数点以下の項をふくまない


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10500円です。


に変更するもう1つの方法は


%f出力変換指定子の書式設定をつかえばいいの。」


聡子「%f出力変換指定子の書式設定?」


清美「%f出力変換指定子は


%.0f

%.1f

%.2f

と記述することにより


%f出力変換指定子によって出力される実数値を


%.0fなら"小数点以下の項を表示しない"

%.1fなら"小数点以下第1位までの項を表示する"

%.2fなら"小数点以下第2位までの項を表示する"


ということができちゃうんだ。


そのさい

%.0fなら小数点以下第1位が四捨五入されて

整数値部分のみが表示され


%.1fなら小数点以下第2位が四捨五入されて

小数点以下第1位までの項が表示され


%.2fなら小数点以下第3位が四捨五入されて

小数点以下第2位までの項が表示され


ているんです~


だから


ソースコードを


出力変換指定子の書式設定%.0fをつかって


次のように記述すれば

👇


#include <stdio.h>


int main(void)

{

float a;

a=1.05;


printf("あなたの預金額はただいま%.0f円です。\n",10000*a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10500円です。


👆



10499.999523の小数点以下第1位を四捨五入して


10500と表示させることができるんだ~


このように


%.0f


と記述して


小数点以下の項を表示しない設定にした場合では


小数点以下第1位の位は四捨五入が行われて


整数値部分のみが表示されているんだよ」


聖美「あなた いつのまに こんなに調べたの?


すんごいわねえ。


%.0f(整数値部分の項だけを表示する、小数点以下の項は表示しない)

と記述されたら

小数点以下第1位の位が四捨五入されて


%.1f(小数点以下第1位までの項を表示する)

と記述されたら

小数点以下第2位の位が四捨五入されて



%.2f(小数点以下2位までの項を表示する)

と記述されたら

小数点以下第3位の位が四捨五入されるわけね。


ここで

%.0f(整数値部分の項だけを表示する、小数点以下の項は表示しない)

と記述されたら

小数点以下第1位の位が四捨五入されるってところが


すごいわあ


だって

今のプログラムの場合では

👇

#include <stdio.h>


int main(void)

{

float a;

a=1.05;


printf("あなたの預金額はただいま%.0f円です。\n",10000*a);

return 0;

}


プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10500円です。


👆

10000*a(a=1.05)の計算結果(10499.99923)の整数値部分を求めているわけだけど


10000*a(a=1.05)の計算結果(10499.99923)の☆小数点以下1位の位の数値9が四捨五入されている☆わよね



前のエピソードのプログラムの場合は

👇


#include <stdio.h>


int main(void)


{

int a;

a=105;

printf("あなたの預金額はただいま%d円です。\n",10000*a/100);


return 0;


}


プログラムの実行結果


(統合開発環境EAZY IDECの場合)


あなたの預金額はただいま10500円です。



👆



仮に


10000*a/100(a=105)の計算結果が


10500.0000011111になったとしても


10000*a/100(a=105)は整数値同士の掛け算なので


☆小数点以下の項.0000011111は切り捨てられることになる☆じゃない


これで


計算結果の整数値部分を求める際


計算結果の小数点以下第1位の位を四捨五入する方法



計算結果の小数点以下の項を切り捨てる方法



2つの方法


が使えるようになったってわけね


つまり


実数値の計算結果を整数値表示する場合


%.0fをもちいて


実数値の計算結果の小数点以下第1位の位を四捨五入する方法




実数値の計算をすべて整数値の計算に置き換えることにより


実数値の計算結果の小数点以下を切り捨てる方法



2つの方法


が使えるようになったってわけね」



おまけ



清美「あっ


思い出した


そういえば


前の前のエピソードのプログラムは

👇

#include <stdio.h>


int main(void)

{

float a;

a=1.05;


printf("あなたの預金額はただいま%d円です。\n",(int)(10000*a+0.5));

return 0;

}



プログラムの実行結果(EAZY IDECの場合)


あなたの預金額はただいま10500円です。


👆


あなたの預金額はただいま10499.999523円です。



あなたの預金額はただいま10500円です。


と表示するためのものだったね


(int)(10000*a+0.5)が用いられています




10000*a(a=1.05)の計算結果が


10499.999523


となるのだけど


10499.999523



なんとか


きれいに整数値の部分


10500


だけにしたというわけなの


結論からいうと


このプログラムでは


10000*a=10499.999523の小数点以下第1位を四捨五入して


10500を得る方法が用いられているの


(詳しくは前の前のエピソードを参照してください)


その方法が


(int)(10000*a+0.5)


なのね」




聡子「やったね 清美ちゃん」



  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る