0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめてのC#【 03_型変換 】

Last updated at Posted at 2024-08-17

はじめに

 【C#(シーシャープ)】 はMicrosoft社が開発した
   プログラミング言語で、C++やJavaに似た構文を持ち
   .NET Framework上で稼働するWindowsアプリの開発や
   Webアプリケーション開発のためのフレームワークである
   ASP.NETが使用可能なプログラム言語です。

このメモは、C#の基本的な記載方法のまとめです。

前回


同じ型どうしの計算

整数同士の割り算を行うと、小数点以下が切り捨てられる


using System;

class Program
{
    static void Main()
    {
        int a = 7;
        int b = 2;

        // 割り算の結果を計算します
        int result = a / b;

        // 結果を表示します
        Console.WriteLine($"{a} / {b} = {result}");
    }
}

実行結果※1
7 / 2 = 3
 

本来 3.5 ですが、整数型の割り算では小数点以下が切り捨てられるため、結果は 3 となります。


キャスト演算子

割り算を行う前に、実数型(doubleやfloatなど)に変換すると小数点以下の値が保持される


using System;

class Program
{
    static void Main()
    {
        int a = 7;
        int b = 2;

        // 割り算の結果を計算する前に
        // aまたはbをdecimalにキャストします。
        decimal result = (decimal)a / b;
        
        // 結果を表示します
        Console.WriteLine($"{a} / {b} = {result}");
    }
}

実行結果
7 / 2 = 3.5
 

decimal型を使って計算すると、整数型同士の割り算でも切り捨てが発生せず、正確な結果が得られます。

ただし、以下に注意が必要です。
・decimal型は、他の数値型(intやdouble)に比べて
計算処理が遅い。
・メモリ使用量が大きい
・科学計算や工学的な計算では、浮動小数点数を使用し、
広い範囲の数値を効率的に扱えるdouble型が適しています。


浮動小数点演算との互換性

異なる型の演算を行うと、暗黙的な型変換が発生し、予期しない結果を引き起こす可能性があります。

using System;

class Program
{
    static void Main()
    {
        decimal decimalValue = 1.1m;  // decimal型
        double doubleValue = 2.2;     // double型
        
        // decimalとdoubleの混合計算※2
        var result = decimalValue + (decimal)doubleValue;

        // 結果を表示します
        Console.WriteLine($"Result: {result}");
    }
}

decimal型とdouble型は直接計算できません。
型の違いによる精度の問題が発生するため、
doubleValueをdecimalにキャスト(変換)する必要があります。

キャストなしの場合

var result = decimalValue + doubleValue;

これだとコンパイルエラーになります

精度の違い

double型は二進浮動小数点数として格納されるため、
1.1や2.2のような値を正確に表現できないことがあります。

decimal型は十進浮動小数点数で格納されるため、
金融計算などで必要な高い精度を保てます。

仮に両方の型を同じ演算に使用した場合、
結果の精度が予期せず低下する。

double型の精度が低いため、
decimalにキャストしても元のdoubleの誤差が残る。

まとめ

decimalとdoubleを混在して使うときは、意図しない結果や精度の低下を招く可能性があります。計算を行う前に、どちらかの型に明示的にキャストして、意図した型で演算を行うことが重要です。


※1

フォーマット指定子 ($) を記号を使った文字列補間を利用して、簡単に変数や計算式の値を文字列に埋め込む

{a} は、変数 a の値(7)が置き換えられます。
{b} は、変数 b の値(2)が置き換えられます。
{result} は、a / b の計算結果の値(3)が置き換えられます。

Console.WriteLineを使って引数を指定し、フォーマットする例
int x = 5;  // 引数1:整数5を変数xに代入
int y = x * 10;  // 引数2:xを10倍した結果を変数yに代入

// Console.WriteLineを使用して、引数xとyを指定して出力
Console.WriteLine("x = {0}, xの10倍は {1}です", x, y);

実行結果
x = 5, xの10倍は 50です

※2

【C#】varについて改めて調査してみる


次回


参考文献

C#関連情報サイト様


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?