CodeGym /コース /C# SELF /小数とdouble型へのイントロ

小数とdouble型へのイントロ

C# SELF
レベル 6 , レッスン 2
使用可能

1. 小数

ちょっとプロジェクトを思い出してみて。例えば、めっちゃシンプルな電卓とか、お金の計算から物理シミュレーションまで、計算が必要なプログラムっていっぱいあるよね。現実世界では整数だけじゃ済まないことが多いし、これは仕方ない!

だから、新しいデータ型を使ってみよう!

プログラミングでは小数のことを実数とか浮動小数点数floating-point)とも呼ぶよ。C#でも他の言語と同じく、整数だけじゃなくて「小数」も保存できる:例えば3.14-28.572.718281828みたいなやつね。

実数には主に2つの型があるよ:

保存するもの 値の範囲(だいたい) 精度 典型的なサイズ
float
数値 ±1.5 × 10-45 ... ±3.4 × 1038 小数点以下約7桁 4バイト
double
数値 ±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. 大事:doubleintの自動・明示的変換

整数と小数を足したり、intdoubleに代入したりしても、エラーにはならないよ:

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桁
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION