そこで今回は数値の小数点以下はどうやって表示・計算するのかを説明します。
小数点以下の数値の表示
では前回を少し思い出しましょう。
#include <stdio.h>
int main(void)
{
printf("%d¥n", 1.3);
return 0;
}
実行結果
-858993459
こんな風に表示されてしまいましたね。
どうすればいいでしょうか?
%d指定子は整数を表示するために使いました。
ということは小数点以下を表示してくれる指定子があるということです。
いちいち指定してやらないとコンピュータが理解してくれないんですね。
そこで今回使うのは「%f指定子」です。ただ%dを%fにしてやるだけですので難しくは無いと思います。
とりあえずやってみましょう。
#include <stdio.h>
int main(void)
{
printf("%f¥n", 1.3);
return 0;
}
実行結果
1.300000
ちゃんと実行できたでしょうか?間違えていないかちゃんと確認しましょう。
こんな風に%f指定子を指定してやることで小数点以下を表示することが出来ます。
また、小数点以下の数値(実数)を「浮動小数点数」といいます。覚えて置いてください。
ついでに計算もしてみましょう。
#include <stdio.h>
int main(void)
{
printf("%f¥n", 10 / 3);
printf("%f¥n", 5 / 2);
return 0;
}
実行結果
0.000000
0.000000
多分こんな風に表示されてしまうんではないかと思います。
もちろん最近のコンパイラは表示してくれる場合もありますが普通はこうなると思います。
ちゃんと計算されていませんね。
実は整数でも、「10.0」っていう風に小数点以下も入力してやらないといけないのです。
要するに頑固なんですね。
ということで以下が正解の書き方。
#include <stdio.h>
int main(void)
{
printf("%f¥n", 10.0 / 3.0);
printf("%f¥n", 5.0 / 2.0);
return 0;
}
実行結果
3.333333
2.500000
変換指定
さて入力したときには「1.3」と入力したのに実行したら「1.300000」という表示になりました。
これは何かのミス?だと思う方もいるかもしれませんがそうではありません。
何もしない状態だと小数点以下下6桁まで表示してしまうんです。
実はこれ、命令してやるとちゃんと「1.3」という風に表示できるんです。
どうやるかというと「%f指定子」に
%.1f
という風にやってやるとちゃんと「1.3」と表示します。
#include <stdio.h>
int main(void)
{
printf("%.1f¥n", 1.3);
return 0;
}
実行結果
1.3
「%」と「f」の間に数値を入力してやるとその数値の桁数まで表示させることが出来ます。
今回は「.1」だったので小数点以下1桁(小数点下1桁)まで表示しますという命令です。
他にも
%4d
なら整数を少なくとも4桁
%3.3f
なら整数を少なくとも3桁かつ小数点以下3桁
%5.2f
なら整数を少なくとも5桁かつ小数点以下2桁
という感じです。
整数の場合は実際に表示する数値が指定した桁数より大きい場合は表示する数値が優先されます。
また、整数値部分の指定は小数点と小数点以下の桁数に含みます。
小数点以下の指定は絶対です。
他にも「0フラグ」というのもあります。
これは余白があるとき0で詰めて表示してくれます。
以下のプログラムを実行してみてください。
#include <stdio.h>
int main(void)
{
printf("[%4d]¥n", 99);
printf("[%04d&]yen;n", 99);
return 0;
}
実行結果
[ 99]
[0099]
こんな風に0を指定しない場合は余白で、0を指定してやると0で詰めてくれます。
逆に余白を詰めて欲しい場合は「-(マイナス)」を指定してやります。
#include <stdio.h>
int main(void)
{
printf("[%4d]¥n", 99);
printf("[%04d]¥n", 99);
printf("[%-4d]¥n", 99);
return 0;
}
実行結果
[ 99]
[0099]
[99 ]
では最後に
[0987.65]
[987.65 ]
を表示させて見ましょう。
普通なら整数が3桁、小数点以下が2桁なので
#include <stdio.h>
int main(void)
{
printf("[%03.2f]¥n", 987.65);
printf("[%-3.2d]¥n", 987.65);
return 0;
}
とやってみます。
実行結果
[987.65]
[987.65]
あれ?何か上手くいきませんね。
何か間違っているんでしょうか?
実は先ほど「整数値部分の指定は小数点と小数点以下の桁数に含みます」といったのを覚えてますか?
要はそういうことなのです。
整数部分を指定する場合、0で詰める場合や余白をあけるときに気をつけなければいけません。
「987.65」は小数点を含めて数えると6ですよね。
でも6だと先ほどと同じような結果が出てしまいます。
余白部分(0の部分)を一桁追加してやら無いといけないので7を指定してやらないといけないんです。
%07.2f
としてやらないと表示したいように表示できないんです。
#include <stdio.h>
int main(void)
{
printf("[%07.2f]¥n", 987.65);
printf("[%-7.2f]¥n", 987.65);
return 0;
}
実行結果
[0987.65]
[987.65 ]
メニューへ戻る
タグ:C言語
↓もしこの記事が役に立ったらクリックお願いします。


【プログラミング>C言語の最新記事】