float와 double 사이의 형식 변환에서도 정수 형식끼리의 변환에서 일어났던 일(오버플로우)이 그대로 일어나지 않습니다.
float, double은 소수를 이진수로 메모리에 보관합니다. 이것을 다른 형식으로(float에서 double로, 또는 double에서 float으로) 변환하려면 10진수로 복원한 후, 다시 이진수로 변환해서 기록하게 됩니다. 문제는 이진수를 표현하는 소수가 완전하지 않다는 데 있습니다. 1/3 같은 수는 0.333 ... 같은 무한 소수가 되지요.
즉 정밀한 수를 다뤄야하는 프로그램에서 float, double 사이의 형식 변환을 시도할 때는 주의를 기울여야 합니다.
다음 예제는 float, double 간 형식 변환에서 일어날 수 있는 문제를 보여줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
using System;
namespace FloatConversion
{
class MainApp
{
static void Main(string[] args)
{
float a = 69.6875f;
Console.WriteLine("a : {0}", a);
double b = (double)a;
Console.WriteLine("b : {0}", b);
Console.WriteLine("69.6875 == b : {0}", 69.6875 == b);
float x = 0.1f;
Console.WriteLine("x : {0}", x);
double y = (double)x;
Console.WriteLine("y : {0}", y);
Console.WriteLine("0.1 == y : {0}", 0.1 == y);
}
}
}
|
cs |

실행 결과입니다.
'C#' 카테고리의 다른 글
부동 소수점 형식과 정수 형식 사이의 변환 (0) | 2022.07.18 |
---|---|
부호 있는 정수 형식과 부호 없는 정수 형식 사이의 변환 (0) | 2022.07.18 |
크기가 서로 다른 정수 형식 사이의 변환 (0) | 2022.07.15 |
박싱과 언박싱에 대한 이해 (0) | 2022.07.15 |
object 형식의 이해 (0) | 2022.07.15 |