新着記事
08/24: 待ち時間・アカウントなしで4sharedにあるファイルをダウンロードするには
08/23: 色んな歌詞検索サイトから歌詞を探してくれる高機能歌詞検索ソフト -Lyrics Master-
08/01: フリーでいろんな国のIPアドレスを利用できるFireFoxのVPNアドオン -Hola Unblocker-
07/18: 著作権フリー・無料で利用できるBGMダウンロードサイト - audionautix
07/17: apngをブラウザ上で見るには
06/14: deviantARTなどで入手したテーマに変更するには
06/03: [KissAnime] - 日本語検索可能でいろんなタイトルが見れるアニメ無料視聴サイト
05/30: スマホをギターにして演奏してしまう動画
05/23: InoReader - シンプルで使いやすいRSSリーダー
05/18: [Apowersoft音声録音フリーツール] - PC・マイクから簡単に録音できるフリーツール
05/12: フリーのDNSへ簡単に変更出来るDNSチェンジャー - [ChrisPC DNS Switch]
05/11: C言語 入門 複合文について
05/10: TabsBy.Net - フリーで利用可能なオンラインTABプレーヤー
05/09: [Chrome Extension]Chromeで新しいタブを開いたときにWindows8のメトロ画面にするExtension - New MetroTab
05/06: Bop.fm - フリーでクールなインターフェイスのオンライン音楽プレーヤー
05/05: iAlbums - アルバムごとにカテゴライズされたプレイリスト作成も可能なオンライン音楽プレーヤー
09/20: [B1 Online Archiver] オンライン上で圧縮ファイルを解凍できるサイト
09/15: Operaの旧バージョン(15以前)にXSSの脆弱性が
09/10: ペルセウス座流星群を1分で
08/29: スマホアプリ紹介サイト
RSS feeds

2010年05月17日

C言語 入門 小数点以下の計算はどうやるの?

前回「整数」の計算をやりましたが、小数点以下の計算・表示が出来ませんでしたね。
そこで今回は数値の小数点以下はどうやって表示・計算するのかを説明します。

小数点以下の数値の表示


では前回を少し思い出しましょう。
#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言語


↓もしこの記事が役に立ったらクリックお願いします。
人気ブログランキングへ ブログランキング・にほんブログ村へ



posted by Yuichi at 00:00 | Comment(0) | TrackBack(0) | プログラミング>C言語 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック

Copyright (C) 2009-2010 Yuichi All Rights Reserved.