Java에서 Long에서 Double로 변환


93

Long데이터 유형을 Double또는 로 변환하는 방법이 double있습니까?

예를 들어, 나는 변환 할 필요가 15552451LA를 double데이터 유형입니다.

답변:


136

간단히 할 수 있습니다.

double d = (double)15552451L;

또는 Long 객체에서 다음과 같이 두 배를 얻을 수 있습니다.

Long l = new Long(15552451L);
double d = l.doubleValue();

6
:이 구문 분석 문자열이 필요하지 않습니다 Long.valueOf(15552451L).doubleValue()당신이를 통해 가고 싶은 경우를 Long. 이것은 double자동 / 언 박싱을 수행한다는 점을 제외하고는 에서 캐스트와 내부적으로 동일 합니다.
Joe Kearney

4
내가했다. 이 작업을 수행하기 위해 문자열을 구문 분석하면 (현재 답변에서 편집 됨) 성능이 몇 배나 저하됩니다. 권투는 덜 비싸지 만 피할 가치가 있습니다. 특히 제거 new할 수없는 이와 같은 경우 (사용 ).
Joe Kearney

나는 예제가 Long-> double에서 얻을 수 있음을 보여 주기로되어 있다고 생각합니다. Long이 어떻게 초기화되었는지는 그다지 중요하지 않은 것 같습니다.
ams

1
대답의 예가 이제 편집되어 더 합리적으로 보입니다. 문자열을 통해 값에서 double로 변환하는 것은 좋지 않다고 유지합니다. 나는 그것이 상당히 논란의 여지가 없다고 생각했을 것입니다.
Joe Kearney

1
명시 적으로 캐스트 할 필요는 없습니다. 그냥 작동합니다double d = 15552451L;
cutemachine

20

간단한 캐스팅?

double d = (double)15552451L;

그리고 만약 문자 바로 그것15552451d
존 프리드먼

2
캐스트가 필요하지 않다고 생각합니다. "double d = 1234L;"과 같이 긴 값을 가진 double을 만들 수 있습니다.
crusam

아마도 그렇지 않을 것입니다. 그러나 질문은 캐스팅과 같은 개념의 도입을 보증하기에 충분히 기초적입니다.
Jim Brissom

9

이미 언급했듯이 간단하게 long에서 double로 캐스팅 할 수 있습니다. 그러나 long에서 double 로의 변환 은 Java에서 축소 변환 이므로 주의하십시오 .

double 형식에서 long 형식으로 변환하려면 64 비트 부동 소수점 값에서 64 비트 정수 표현으로 간단하게 변환해야합니다. 실제 런타임 값에 따라 정보가 손실 될 수 있습니다.

예 : 다음 프로그램은 0이 아닌 1을 인쇄합니다.

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);

4

바이너리 변환을 찾고 계십니까?

double result = Double.longBitsToDouble(15552451L);

이것은 리터럴 double과 동일한 비트 패턴을 제공합니다 long.

바이너리 또는 16 진수 리터럴이 여기에서 유용합니다. 여기 예시들이 있습니다.

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);

( Double.longBitsToDouble (long) 참조 )

당신은 또한 long다시 얻을 수 있습니다

long bits = Double.doubleToRawLongBits(Double.NaN);

( Double.doubleToRawLongBits (double) 참조 )


이것은 다른 작업을 수행합니다. jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
Jiri Kremser

예. 그러나 그는 지정하지 않은 방법 그는 변환하고자 long으로 double도 그가 어떤 대답을 받아 않았다 (I 캐스팅 자바를 사용할 때 배우는 최초의 것들 중 하나라고 생각합니다). 아마도 그는 값 double과 동일한 비트 패턴을 갖고 싶어 할 것 long입니다. 글쎄, 모르겠다. 그래서 그냥 대답을했습니다.
pvorb

추가 정보를 추가했기 때문에 답변이 더 중요합니다.
pvorb

3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

이렇게하면 문자열 값을 Double 또는 Float 또는 Int로 쉽게 변환 할 수 있으므로 Long 유형을 Double 또는 Float 또는 Int로 문제없이 변환 할 수 있습니다.


2
답변으로 게시하는 코드에 설명을 추가하여 방문자가 왜 이것이 좋은 답변인지 이해하는 데 도움이되도록 항상 더 좋습니다.
abarisone

1

긴 날짜 유형 이란 무엇을 의미 합니까?

long을 double로 캐스팅 할 수 있습니다.

double d = (double) 15552451L;

긴 날짜는 "Tuesday, 19 September 24893243092333"과 같은 것 같습니다.
Teemu Leisti 2013

1

다음과 같이 시도 할 수 있습니다.

long x = somevalue;

double y = Double.longBitsToDouble(x);

0

당신에게 좋은 것 같아요.

BigDecimal.valueOf([LONG_VALUE]).doubleValue()

이 코드는 어떻습니까? :디

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.