C言語基礎|浮動小数点数とdouble型

浮動小数点数と double 型 ― 小数を正しく扱うために

これまでの章では、int 型を使って整数の計算を行ってきました。
しかし、現実世界の数値は必ずしも整数だけとは限りません。

  • 割引後の金額
  • 平均値
  • 距離や時間
  • 温度や割合

こうした 小数を含む値 を扱うために、C言語では
浮動小数点数(floating point number) という形式が用意されています。

浮動小数点数を扱う型はいくつかありますが、
この記事では最も基本で、実用性の高い double 型 を学習します。

整数型と double 型の違いを体験してみよう

まずは、整数型と double 型で 同じ数値を代入・計算したときに、結果がどう変わるか を見てみましょう。
元の例とは少し内容を変え、金額の計算 をテーマにします。

サンプルプログラム(整数と実数の比較)

プロジェクト名:chap2-6-1 ソースファイル名:chap2-6-1.c

// 整数型と double 型の違いを確認するプログラム
#include <stdio.h>

int main(void)
{
    int price_int;
    double price_double;

    price_int = 12.75;
    price_double = 12.75;

    printf("int型の金額      :%d\n", price_int);
    printf("price_int / 2    :%d\n", price_int / 2);

    printf("double型の金額   :%f\n", price_double);
    printf("price_double / 2 :%f\n", price_double / 2.0);

    return 0;
}

実行結果

int型の金額      :12
price_int / 2    :6
double型の金額   :12.750000
price_double / 2 :6.375000

同じ代入でも結果が変わる理由

このプログラムでは、int 型と double 型の変数に 同じ 12.75 を代入しています。
しかし、結果はまったく同じにはなりません。

int 型への代入

特徴内容
扱える値整数のみ
実数代入小数部が切り捨てられる
保存される値12

そのため、

  • price_int には 12 が格納される。
  • price_int / 2 は 整数 ÷ 整数 の計算
  • 結果は 6(小数部は切り捨て)

となります。

double 型への代入と演算

一方、double 型は 小数部を含む実数 を扱える型です。

特徴内容
扱える値実数(小数を含む)
実数代入そのまま保持
演算小数を含めて計算

そのため、

  • price_double には 12.75 がそのまま格納される。
  • price_double / 2.0 は 実数 ÷ 実数 の計算
  • 結果は 6.375

となります。

printf 関数と変換指定子

数値を表示するには printf 関数を使いますが、
型に応じた変換指定 を使う必要があります。

変換指定説明
int%d整数を表示
double%f浮動小数点数を表示

%f の f は floating point(浮動小数点) の頭文字です。
なお、何も指定しない場合は、小数点以下が 6 桁 表示されます。

型とオブジェクトの考え方

ここで、型と変数の関係を整理しておきましょう。

  • :値の性質や扱い方を決める設計図
  • 変数:型をもとに作られた実体(オブジェクト)

イメージで考えると…

  • 型 → たい焼きの型
  • 変数 → 実際に焼かれたたい焼き

int 型の設計図から作られた変数は「整数専用」、
double 型の設計図から作られた変数は「実数対応」になります。

このように、
型の性質は、そのまま変数(オブジェクト)の性質になる
という点がとても重要です。

int 型と double 型のまとめ

項目int 型double 型
表現できる値整数のみ実数(小数を含む)
小数部切り捨て保持される
主な用途個数、回数、番号平均、割合、金額

「計算結果がおかしいな?」と感じたときは、
どの型で計算しているか を確認するクセをつけておくと安心です 。