2017-03-20 11 views
0

나는 자바를 배우기 시작하고 리터럴에 관한 질문을했다.(Java) 0x12.2P2가 0x12.2F가 아닌 올바른 이유는 무엇입니까?

코드 :

class what_is_px_literals { 
public static void main(String args[]) 
{ 
    float a = 0x12; //Question Line 
    System.out.print("\nThis is the number in:\n\tHexdecimal:\t0x12.2\n\tDecimal:\t"+a+"\n\tWorking of P\t"+0x12.2P2+"\n"); 
} 
} 

위의 코드는 오류없이 컴파일합니다. 그러나 라인을 다음과 같이 다시 작성하십시오.

float a = 0x12.2 //or float a = 0x12.2F or double a = 0x12.2D 

이 오류를 제공합니다.

왜 소수점 뒤에 숫자가 추가되면 오류가 발생합니까?

float a = 0x12.2 //or float a = 0x12.2F or double a = 0x12.2D 
+1

기본적으로 이것은 16 진수 부동 소수점 리터럴 형식이기 때문에. http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.2를 참조하십시오. –

답변

1

기본적인 이유는이 표기되지 편의를 정확한 표현을 위해 추가되었습니다됩니다 :

왜 코드 잘못이 라인입니다. 지수는 부동 소수점 값의 내부 표현 에서처럼 기본 2에 주어질 것으로 예상됩니다.

왜 소수점 뒤에 숫자가 추가되면 오류가 발생합니까?

이러한 점만으로는 유용하지 않은 값에 사용되므로 16 진수에는 사용되지 않습니다. 이 표기법을 사용하려면 지수를 제공해야합니다.

Double 소스.

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308 

public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308 
+0

그러면 부동 소수점 숫자는 16 진수 형식으로 어떻게 표현됩니까? –

+0

@ Aswath.S 시작시 0x와 끝 부분에 Pn이 있어야합니다. 예 : 1은 0x1p0입니다. –