C#에서 double을 64비트 부호 있는 정수(long)로 변환하기
C#에서 지정된 배정밀도 부동 소수점 숫자(double)를 64비트 부호 있는 정수(long)로 변환하려면 BitConverter.DoubleToInt64Bits() 메서드를 사용합니다.
이 메서드는 지정된 배정밀도 부동 소수점 숫자를 IEEE 754 표준에 따라 64비트 부호 있는 정수로 인코딩하여 반환합니다. 반환되는 정수 값은 원래 숫자의 내부 비트 표현을 그대로 담고 있으므로, 실제 수학적 값이 아니라 비트 패턴을 정수로 해석한 결과라는 점에 유의해야 합니다.
예제 1
다음은 double 값을 long으로 변환하는 기본적인 예제입니다.
using System;
public class Demo {
public static void Main() {
double d = 5.646587687;
Console.Write("Value = "+d);
long res = BitConverter.DoubleToInt64Bits(d);
Console.Write("\n64-bit signed integer = "+res);
}
}
출력
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value = 5.646587687
64-bit signed integer = 4618043510978159912
예제 2
이번에는 다른 double 값으로 동일한 변환을 수행해 보겠습니다.
using System;
public class Demo {
public static void Main() {
double d = 0.001;
Console.Write("Value = "+d);
long res = BitConverter.DoubleToInt64Bits(d);
Console.Write("\n64-bit signed integer = "+res);
}
}
출력
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Value = 0.001
64-bit signed integer = 4562254508917369340
참고 사항
변환된 정수 값은 원래 double 값과는 전혀 다른 매우 큰 숫자처럼 보입니다. 이는 double의 내부 비트 구조(부호 비트, 지수부, 가수부)를 그대로 정수로 해석한 결과이기 때문입니다. 만약 반대로 64비트 정수를 다시 double 값으로 변환하고 싶다면 BitConverter.Int64BitsToDouble() 메서드를 사용하면 됩니다.