組み込み型の型変換
数値型同士の変換
暗黙的な型変換
プログラミングでは様々なデータ型を扱うので、時には別のデータ型同士の演算を行うこともあります。
short shortNum = 10;
int intNum = shortNum;
short型とint型とではint型のほうが扱える数値の幅が広いので、上記のような代入は問題なく行えます。
このとき、変数shortNumの値は自動的にint型に変換されて代入されます。
このような変換を暗黙的な型変換といいます。
ではこれを逆にするとどうでしょうか。
int intNum = 10;
short shortNum = intNum; //←エラー
このコードはエラーになります。
変数intNumの中身はshort型でも扱える「10」という値ですが、実際の値に関係なく、扱えるデータ幅の大きいほうから小さいほうへの代入はC#では許されていません。
明示的な型変換(キャスト)
上記のような代入をするには明示的な型変換(キャスト)を行います。
int intNum = 10;
//int型変数をshort型に変換(キャスト)
short shortNum = (short)intNum;
変換したい値の前に丸括弧を書き、目的のデータ型名を記述します。
これをキャスト演算子といいます。
キャスト演算子を使用すると、変数intNumは一時的にshort型として扱われます。
値はshort型に変換されているので、short型変数shortNumに値を代入可能となります。
ただし変換前の値が変換後のデータ型で扱える範囲以上だった場合、オーバーフローが発生することに注意してください。
整数型から実数型への変換
整数型から実数型(小数型)への代入は、キャストなしでそのまま行えますが、精度の問題でデータの変化が生じる可能性があります。
int intMax = int.MaxValue;
float f = intMax;
Console.WriteLine(intMax);
Console.WriteLine("{0:f}", f);
2147483647 2147484000.00
実数型から整数型への変換
実数型から整数型への代入はキャストが必要です。
この時、小数点以下は切り捨てられます。
float f = 1234.56f;
int i = (int)f;
Console.WriteLine(f);
Console.WriteLine(i);
1234.56 1234
整数型同士の除算で小数点以下を得る
int型などの整数型同士の演算はint型として計算されます。
(サイズがint型以下のデータ型の場合。long型が含まれる場合はlong型で計算される)
除算(割り算)もint型で行われるので、計算結果から小数以下は切り捨てられてしまいます。
小数以下の値も必要な場合はdouble型などの実数型にキャストしてから計算します。
int num1 = 25;
int num2 = 2;
//これはダメ
//double real = num1 / num2;
double real = (double)num1 / num2;
どちらか一方が実数型であれば良いので、キャストするのは片方だけで構いません。
参照型のキャスト
参照型変数の場合にはもうひとつキャスト方法があります。
詳しくは参照型変数のキャストで説明します。
文字列型、数値型、bool型の相互変換
文字列型、数値型、bool型の変換についてはデータ型の相互変換を参照してください。