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


##    はじめに

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

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

--------------------------------------------------------------

## 前回

https://qiita.com/nano357/items/fc89ed47d5bc0cc7603c


------------------------------------------------

## <font color="green">同じ型どうしの計算</font>
#### 整数同士の割り算を行うと、小数点以下が切り捨てられる


```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 となります。


------------------------------------------------

## <font color="green"> キャスト演算子</font>
#### 割り算を行う前に、実数型（doubleやfloatなど）に変換すると小数点以下の値が保持される

```C#

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型が適しています。

------------------------------------------------

## <font color="green">浮動小数点演算との互換性</font>
#### 異なる型の演算を行うと、暗黙的な型変換が発生し、予期しない結果を引き起こす可能性があります。

```C#
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にキャスト（変換）する必要があります。

## キャストなしの場合

```C#
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を使って引数を指定し、フォーマットする例

```C#
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について改めて調査してみる](https://qiita.com/4_mio_11/items/db9584ae47dbc55374e7)

--------------------------------------------------------------

## 次回

https://qiita.com/nano357/items/550e552d0c53c0782a05

--------------------------------------------------------------
## 参考文献

C#関連情報サイト様

https://itthestudy.com/category/programming/code/c-sharp/

https://atmarkit.itmedia.co.jp/fdotnet/csharp_abc/index/index.html

https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/types/casting-and-type-conversions


--------------------------------------------------------------