1. 小数
ちょっとプロジェクトを思い出してみて。例えば、めっちゃシンプルな電卓とか、お金の計算から物理シミュレーションまで、計算が必要なプログラムっていっぱいあるよね。現実世界では整数だけじゃ済まないことが多いし、これは仕方ない!
だから、新しいデータ型を使ってみよう!
プログラミングでは小数のことを実数とか浮動小数点数(floating-point)とも呼ぶよ。C#でも他の言語と同じく、整数だけじゃなくて「小数」も保存できる:例えば3.14、-28.57、2.718281828みたいなやつね。
実数には主に2つの型があるよ:
| 型 | 保存するもの | 値の範囲(だいたい) | 精度 | 典型的なサイズ |
|---|---|---|---|---|
|
数値 | ±1.5 × 10-45 ... ±3.4 × 1038 | 小数点以下約7桁 | 4バイト |
|
数値 | ±5.0 × 10-324 ... ±1.7 × 10308 | 小数点以下約15-16桁 | 8バイト |
float型
float型はfloating-point number(浮動小数点数)から来てる。実数って数学の世界の話だけど、コンピュータにはいろんな制限があるから、C#で小数を「実数」と呼ぶのはちょっと違う。だから「浮動小数点数」って呼ぶのが正しいんだ。
float型は普通7桁の有効数字(例:0.1234567)、10のべき乗、そして4バイトのメモリを使う。精密な計算にはちょっと足りないから、みんなすぐに倍精度の数値を使うようになるよ。
2. double型の変数宣言と初期化
intと同じ感じだけど、今度はdoubleを使うよ。
// 変数を宣言して円周率を代入
double pi = 3.1415926;
// 初期化なしでも宣言できる
double averageSalary;
averageSalary = 91234.56;
// 計算もできる!
double pizzaPieces = 8;
double friends = 3;
double piecesPerFriend = pizzaPieces / friends; // 2.666...(2じゃないよ)
構文のポイント:
- 小数点はドット(3.14)を使う。カンマを使うとコンパイルエラーになるから注意!
- 厳密に言うと、double d = 3;って書いてもエラーにはならない。型が自動で変換されて(整数が「実数」になる)、損失はないよ。
3. Consoleで実数の入出力
まずは小数を出力してみよう:
double amount = 42.75;
Console.WriteLine(amount); // 出力: 42.75
いい感じ!テキストを追加すると:
Console.WriteLine("あなたの口座残高: " + amount + " ユーロ。"); // あなたの口座残高: 42.75 ユーロ。
キーボードからの入力
ここがポイント:Console.ReadLine()は必ず文字列を返すから、それをdouble型に変換しないといけない。
Console.WriteLine("外の気温を入力してね:");
string input = Console.ReadLine();
double temperature = double.Parse(input); // 文字列をdoubleに変換
Console.WriteLine("今外は: " + temperature + " 度だよ。");
4. double型の実践:計算
いつもの演算(+, -, *, /)はintと同じように使えるよ:
double distance = 100.5;
double time = 2.0;
double speed = distance / time; // 50.25
Console.WriteLine("平均速度: " + speed); // 平均速度: 50.25
これで計算はOK。唯一の違いは、割り算の結果は、どっちかがdoubleなら必ず小数になるってこと。
intと比較してみよう
int a = 5, b = 2;
Console.WriteLine(a / b); // 2(小数点以下切り捨て)
double aa = 5, bb = 2;
Console.WriteLine(aa / bb); // 2.5
5. doubleでよくあるミスや不思議
文字列変換のミス
よくあるのが、ユーザーが3,14って入力しちゃうけど、プログラムは3.14を待ってるパターン。
// "3,14"を入力するとエラーになる
double value = double.Parse(Console.ReadLine());
もしカンマが小数点の国(例えばポーランドやドイツ)で使うなら、double.Parseは普通に動く。でもアプリが「英語」設定ならドットを待ってるから注意。
コンピュータでの「不正確さ」問題
ここで初心者はちょっと混乱しがち:
double x = 0.1 + 0.2;
Console.WriteLine(x); // ん?0.30000000000000004
おめでとう、これがコンピュータ内部での小数の「マジック」だよ。実は、2進数で正確に表せない数が多いんだ。この話は次のレクチャーで詳しくやるけど、今はパニックしないで!ほとんどのアプリでは問題ないけど、お金や科学の分野では注意が必要だよ。
6. 大事:doubleとintの自動・明示的変換
整数と小数を足したり、intをdoubleに代入したりしても、エラーにはならないよ:
int i = 2;
double d = i; // 問題なし!
Console.WriteLine(d); // 2
double dd = 3.7;
int ii = (int) dd; // double型をint型に明示的に変換!
Console.WriteLine(ii); // 3、小数点以下は切り捨て
これで「なんで小数点以下が消えたの?」って驚く人も多い。int型は小数を保存できないから(ドット以下は全部消える)。
doubleからintへの変換や(int)演算子については次のレクチャーで詳しくやるよ。
7. フォーマット付き出力:doubleをきれいに表示しよう
デフォルトだとdoubleは余計なゼロがいっぱい出ることがある。出力をフォーマットできるよ:
double temp = 23.56789;
Console.WriteLine(temp); // 23.56789
Console.WriteLine(temp.ToString("F2")); // 23.57(小数点以下2桁)
Console.WriteLine($"{temp:F1}"); // 23.6(文字列補間)
| フォーマット | 結果 | 説明 |
|---|---|---|
| "F0" | 24 | 小数点以下なし |
| "F2" | 23.57 | 小数点以下2桁 |
| "F5" | 23.56789 | 小数点以下5桁 |
GO TO FULL VERSION