---
description: กฤตนัย วันดี 650710212
---

# Type Casting or Type Conversion

## **Type Casting** คือ

&#x20;การแปลงประเภทข้อมูลเกิดขึ้นเมื่อเรานำค่าจากชนิดข้อมูลหนึ่งไปใส่ในอีกชนิดหนึ่ง หากชนิดข้อมูลสามารถเข้ากันได้ C# จะทำการแปลงอัตโนมัติให้ แต่หากไม่สามารถเข้ากันได้ จะต้องทำการแปลงโดยผู้ใช้เอง ซึ่งเรียกว่า Explicit Type Conversion เช่น การนำค่า `int` ไปใส่ในตัวแปรชนิด `long`



ตัวอย่างเช่น ใน C# ประเภทข้อมูลตัวเลขจะเข้ากันได้ แต่ไม่มีการรองรับการแปลงอัตโนมัติจากประเภทตัวเลขเป็น char หรือ boolean นอกจากนี้ char และ boolean ยังไม่เข้ากันได้ ก่อนที่จะทำการแปลง คอมไพเลอร์จะตรวจสอบความเข้ากันได้ตามรูปต่อไปนี้ก่อน จากนั้นจึงตัดสินใจว่าเข้ากันได้หรือไม่หรือมีข้อผิดพลาดเกิดขึ้น

<figure><img src="https://2358863655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFPtNVavcFSOLzLOmmCgv%2Fuploads%2F9MJDgzV8JUI5UnRlaKe8%2Fimage.png?alt=media&#x26;token=fd9ea915-d07c-4612-8dad-bfc8298fe1f0" alt=""><figcaption><p>ตารางที่แสดงถึงการแปลงประเภทข้อมูลโดยอัตโนมัติ (Implicit Type Casting) ที่ C# รองรับนั้นอธิบายถึงชนิดข้อมูลที่สามารถแปลงกันได้โดยไม่ต้องใช้การแปลงแบบกำหนดเอง (Explicit) เช่น การแปลงจาก <code>int</code> ไปเป็น <code>long</code> หรือจาก <code>float</code> ไปเป็น <code>double</code> ชนิดข้อมูลเหล่านี้สามารถแปลงได้โดยไม่มีการสูญเสียข้อมูล เนื่องจากขนาดหรือความแม่นยำของชนิดข้อมูลเป้าหมายมีมากกว่าหรือเท่ากับข้อมูลต้นทาง</p></figcaption></figure>

<table><thead><tr><th width="342">แปลงจากชนิตข้อมูล</th><th>แปลงเป็นชนิดข้อมูล</th></tr></thead><tbody><tr><td>byte</td><td>short, int, long, float, double</td></tr><tr><td>short</td><td>int, long, float, double</td></tr><tr><td>int</td><td>long, float, double</td></tr><tr><td>long</td><td>float, double</td></tr><tr><td>float</td><td>double</td></tr></tbody></table>

### ตัวอย่างโค้ด Implicit Type Conversion

{% tabs %}
{% tab title="C#" %}
<pre class="language-csharp"><code class="lang-csharp"><strong>// Some code
</strong>// C# program to demonstrate the 
// Implicit Type Conversion 
using System; 
namespace Casting{ 
  
class GFG { 
  
        // Main Method 
        public static void Main(String []args) 
        { 
            int i = 57;  
              
            // automatic type conversion 
            long l = i;  
               
            // automatic type conversion 
            float f = l; 
              
            // Display Result 
            Console.WriteLine("Int value "  +i); 
            Console.WriteLine("Long value "  +l); 
            Console.WriteLine("Float value "  +f); 
        } 
} 
} 
</code></pre>
{% endtab %}

{% tab title="C" %}
<pre class="language-c"><code class="lang-c"><strong><a data-footnote-ref href="#user-content-fn-1">#</a>include &#x3C;stdio.h>
</strong>int main() { 
int i = 57; 
long l = i; 
float f = l;

printf("Int value: %d\n", i);
printf("Long value: %ld\n", l);
printf("Float value: %f\n", f);

return 0;
}
</code></pre>


{% endtab %}

{% tab title="JAVA" %}
```java
public class Main { 
   public static void main(String[] args) { 
       int i = 57; 
       long l = i; 
       float f = l;
       
       System.out.println("Int value: " + i);
       System.out.println("Long value: " + l);
       System.out.println("Float value: " + f);
}
```
{% endtab %}

{% tab title="Python" %}
```python
i = 57 
l = i 
f = float(l)

print(f"Int value: {i}") 
print(f"Long value: {l}") 
print(f"Float value: {f}")
```
{% endtab %}
{% endtabs %}

ผลลัพท์

{% tabs %}
{% tab title="C#" %}
<pre class="language-csharp"><code class="lang-csharp">Int value 57
<strong>Long value 57
</strong>Float value 57
</code></pre>
{% endtab %}

{% tab title="C" %}
<pre class="language-c"><code class="lang-c"><strong>Int value 57
</strong><strong>Long value 57
</strong>Float value 57.0
</code></pre>
{% endtab %}

{% tab title="JAVA" %}
<pre class="language-java"><code class="lang-java">Int value 57
<strong>Long value 57
</strong>Float value 57.0
</code></pre>
{% endtab %}

{% tab title="Python" %}
<pre class="language-python"><code class="lang-python">Int value 57
<strong>Long value 57
</strong>Float value 57.0
</code></pre>
{% endtab %}
{% endtabs %}

ตัวอย่างเมื่อประเภทข้อมูลไม่เข้ากัน

```csharp
// C# program to illustrate incompatible data 
// type for explicit type conversion 
using System; 
namespace Casting{
class GFG {
	// Main Method 
	public static void Main(String []args) 
	{ 
		double d = 765.12; 

		// Incompatible Data Type 
		int i = d; 
		
		// Display Result	 
		Console.WriteLine("Value of i is ", +i); 
	} 
     } 
}
```

ผลลัพท์

```csharp
prog.cs(14,21): error CS0266: Cannot implicitly convert type `double' to `int'.
An explicit conversion exists (are you missing a cast?)
```

ดังนั้น หากเราต้องการกำหนดค่าประเภทข้อมูลขนาดใหญ่ให้กับประเภทข้อมูลขนาดเล็ก เราจะดำเนินการแปลงประเภทโดยชัดเจน

* สิ่งนี้มีประโยชน์สำหรับประเภทข้อมูลที่ไม่เข้ากันซึ่งไม่สามารถทำการแปลงอัตโนมัติได้
* ในที่นี้ ชนิดข้อมูลเป้าหมาย (target-type) จะระบุชนิดที่ต้องการแปลงค่าที่กำหนดไปยังชนิดนั้น โดยการแปลงนี้สามารถใช้กับข้อมูลที่ไม่เข้ากันและไม่สามารถแปลงได้โดยอัตโนมัติ ซึ่งอาจทำให้เกิดการสูญเสียข้อมูลได้ในบางกรณี
* การแปลงชนิดข้อมูลบางครั้งอาจส่งผลให้เกิดการสูญเสียข้อมูล (lossy conversion) ซึ่งหมายถึงเมื่อข้อมูลจากชนิดที่ใหญ่กว่าถูกแปลงไปยังชนิดที่เล็กกว่า จะมีข้อมูลบางส่วนหายไปหรือไม่สามารถเก็บรักษาทุกค่าได้ เช่น การแปลงจาก `float` หรือ `double` เป็น `int` อาจทำให้สูญเสียทศนิยมและมีผลต่อความถูกต้องของข้อมูล

ตัวอย่างโค้ด **Explicit Type Casting**

{% tabs %}
{% tab title="C#" %}
```csharp
using System;

namespace TypeConversionApplication {
   class ExplicitConversion {
      static void Main(string[] args) {
         double d = 5673.74; 
         int i;
         
         // cast double to int.
         i = (int)d;
         Console.WriteLine(i);
         Console.ReadKey();
      }
   }
}
```
{% endtab %}

{% tab title="C" %}
```c
#include <stdio.h>
int main() { 
     double d = 5673.74; 
     int i;

// cast double to int
     i = (int)d;

     printf("%d\n", i);

     return 0;
}
```
{% endtab %}

{% tab title="JAVA" %}
<pre class="language-java"><code class="lang-java"><strong>public class Main {      
</strong><strong>        public static void main(String[] args) {
</strong>        double d = 5673.74;
        int i;

        // cast double to int
        i = (int) d;

        System.out.println(i);
    }
}
</code></pre>
{% endtab %}

{% tab title="Python" %}
```python
d = 5673.74 
i = int(d)
print(i)
```
{% endtab %}
{% endtabs %}

ผลลัพท์

```
d = 5673.74 
i = int(d)
print(i)
```

### <mark style="color:blue;">วิธีการแปลงประเภท C#</mark>

C# ให้วิธีการแปลงประเภทในตัวดังต่อไปนี้

| ลำดับที่ | วิธีการและคำอธิบาย                                                     |
| -------- | ---------------------------------------------------------------------- |
| 1        | <p>ToBoolean</p><p>แปลงชนิดข้อมูลเป็นค่า Boolean หากทำได้</p>          |
| 2        | <p>ToByte</p><p>แปลงชนิดข้อมูลเป็น byte</p>                            |
| 3        | <p>ToChar</p><p>แปลงชนิดข้อมูลเป็นตัวอักษร Unicode</p>                 |
| 4        | <p>ToDateTime</p><p>แปลงชนิดข้อมูล (ตัวเลขหรือสตริง) เป็น DateTime</p> |
| 5        | <p>ToDecimal</p><p>แปลงชนิดข้อมูลเป็น decimal</p>                      |
| 6        | <p>ToDouble</p><p> แปลงชนิดข้อมูลเป็น double</p>                       |
| 7        | <p>ToInt16</p><p>แปลงเป็น 16-bit integer</p>                           |
| 8        | <p>ToInt32</p><p>แปลงเป็น 32-bit integer</p>                           |
| 9        | <p>ToInt64</p><p>แปลงเป็น 64-bit integer</p>                           |
| 10       | <p>ToSbyte</p><p>แปลงเป็น signed byte</p>                              |
| 11       | <p>ToSingle</p><p>แปลงเป็นตัวเลขจุดทศนิยมเล็ก.</p>                     |
| 12       | <p>ToString</p><p>แปลงเป็นสตริง</p>                                    |
| 13       | <p>ToType</p><p>แปลงเป็นชนิดข้อมูลที่กำหนด.</p>                        |
| 14       | <p>ToUInt16</p><p>แปลงเป็น unsigned 16-bit integer.</p>                |
| 15       | <p>ToUInt32</p><p>แปลงเป็น unsigned 32-bit integer</p>                 |
| 16       | <p>ToUInt64</p><p>แปลงเป็น unsigned 64-bit integer</p>                 |

### ตัวอย่างแปลงประเภทค่าต่างๆ ให้เป็นประเภทสตริง

{% tabs %}
{% tab title="C#" %}
```csharp
using System;

namespace TypeConversionApplication {
   class StringConversion {
      static void Main(string[] args) {
         int i = 75;
         float f = 53.005f;
         double d = 2345.7652;
         bool b = true;

         Console.WriteLine(i.ToString());
         Console.WriteLine(f.ToString());
         Console.WriteLine(d.ToString());
         Console.WriteLine(b.ToString());
         Console.ReadKey();
            
      }
   }
}
```
{% endtab %}

{% tab title="C" %}
<pre class="language-c"><code class="lang-c">#include &#x3C;stdio.h>
int main() { 
int i = 75; 
float f = 53.005f; 
double d = 2345.7652; 
int b = 1; // true
<strong>printf("%d\n", i);
</strong>printf("%.3f\n", f); // แสดง 3 ตำแหน่งทศนิยม
printf("%.4lf\n", d); // แสดง 4 ตำแหน่งทศนิยม
printf("%d\n", b); // แสดง true (1)

return 0;
</code></pre>

}
{% endtab %}

{% tab title="JAVA" %}
```java
public class Main { 
       public static void main(String[] args) { 
            int i = 75; 
            float f = 53.005f; 
            double d = 2345.7652; 
            boolean b = true;   
    System.out.println(Integer.toString(i));
    System.out.println(Float.toString(f));
    System.out.println(Double.toString(d));
    System.out.println(Boolean.toString(b));
   }
}
```


{% endtab %}

{% tab title="Python" %}
```python
i = 75 
f = 53.005 
d = 2345.7652 
b = True
print(str(i)) 
print(str(f)) 
print(str(d)) 
print(str(b))
```
{% endtab %}
{% endtabs %}

ผลลัพท์

```
75
53.005
2345.7652
True
```

## Presentation



{% file src="https://2358863655-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFPtNVavcFSOLzLOmmCgv%2Fuploads%2FsttCpsWKQjfye1JbJkst%2FTypeCasting.pdf?alt=media&token=fee3e110-6581-41db-93c4-2401c08cc4fc" %}

## Video Clip

{% embed url="https://youtu.be/IJzw9dBGOQY" %}

## Reference

เนื้อหา Type Casting และโค้ด Implicit Type Conversion

{% embed url="https://www.geeksforgeeks.org/c-sharp-type-casting/" %}

เนื้อหา วิธีการแปลงประเภทของ C# และ โค้ด explicit type conversion กับ การแปลงค่าต่างๆให้เป็นสตริง

{% embed url="https://www.tutorialspoint.com/csharp/csharp_type_conversion.htm" %}

[^1]: 
