MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
しんで覚えるC言語
しんで覚えるC言語

型の変換

整数と実数の混合計算
前章までは、整数なら整数同士、実数は実数同士で計算を行ってきました。
整数と実数とで混合計算を行ったことはありませんでした。

整数と実数との混合計算とは、たとえば、1.03×9 のような計算のことです。
この計算では、実数×整数の計算が行われています。
この様な場合、その答えはどのようになるのでしょうか。

結論から言ってしまうと、この場合、結果は実数になります。
C言語では、整数と実数で計算した場合の結果は実数に変換されます。
これは、結果を整数にしてしまうと、実数部分がなくなってしまうためです。

次のプログラムは、実際に 1.03×9 を計算してみる例です。

ソースコード
#include <stdio.h>

int main(void)
{
    printf("%f\n", 1.03 * 9);
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
9.270000

確かに、答えは実数に変換されていることがわかると思います。
また、試しに%d指定子で整数として表示させてみた所、次のようになりました。

実行結果
-10486

明らかに、おかしな値になっていることがわかります。
なお、こちらの表示はパソコン環境によって変わるので、必ずしも同じ表示にはなりません。
強制的に変換
整数と実数の計算では、答えは実数になることがわかりました。
しかし、場合によっては、整数の答えの方が都合が良い場合も考えられます。

たとえば、消費税の計算は、金額×1.05 (2004/09/14現在)という数式ですが、
この計算を普通に行うと、答えは実数になってしまいます。
金額に小数が含まれるのは不自然です。

もし、実数を、整数に変換する方法があれば、この問題は解決します。
C言語には、型を強制的に変換する機能として、キャスト変換があります。

キーワード
【キャスト変換】

強制的に型を変換する機能


キャスト変換の使い方は、次の通りになります。

キャスト変換
(変換する型名)数値や変数名

たとえば、実数値である 1.05 を整数に変換したい場合 (int)1.05 とすることで、
1.05 が整数に変換され、1 として扱われます。

この方法を使用すれば、消費税の計算も可能になります。
次のプログラムは、360円の商品の消費税を求める例です。

ソースコード
#include <stdio.h>

int main(void)
{
    printf("%d\n", (int)(1.05 * 360));
    return 0;
}

このプログラムの実行結果は、次の通りになります。

実行結果
378

このプログラムで、1.05×360 に () をつけて計算しているのは、
かっこをつけないと、1.05 が先に変換され 1 になってしまうためです。
この例に限らず、コンピュータ特有の計算誤差を減らすためには、計算の順番は重要です。

なお、実数の計算結果やそれを整数に変換した値は、コンパイラやコンピュータの種類により、
多少違ってくることがあるので、ピッタリ378にはならないこともあります。

キャスト変換は、当然、変数に使用することも可能ですし、使い方も同じです。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く