在java.lang.Double
,有以下常數聲明:p在常量聲明
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;
public static final double MIN_NORMAL = 0x1.0p-1022;
什麼是P
呢?案件的差異很重要嗎?
我知道的用於Long
S,Double
S和Float
S中L
,D
和F
,但在此之前從來沒有見過一個P
。
在java.lang.Double
,有以下常數聲明:p在常量聲明
public static final double MAX_VALUE = 0x1.fffffffffffffP+1023;
public static final double MIN_NORMAL = 0x1.0p-1022;
什麼是P
呢?案件的差異很重要嗎?
我知道的用於Long
S,Double
S和Float
S中L
,D
和F
,但在此之前從來沒有見過一個P
。
P
(或p
)指示十六進制floating-point literal,其中有效數字以十六進制指定。
使用p
代替e
。您看到的d
和f
後綴與您正好相反:0x1.0p+2f
和都是有效文字(一個是float
類型,另一個是double
類型)。
乍一看這似乎是,0x
前綴足以識別十六進制浮點文字,爲什麼選擇了Java的設計者改變從e
到p
信?這與e
是一個有效的十六進制數字有關,因此保留它會導致解析模糊。試想一下:
0x1e+2
那是一個十六進制double
或兩個整數,0x1e
和2
的總和?當我們改變e
到p
,模糊解決:如果使用十六進制定義了雙非字面
0x1p+2
的p
語法。當你想要定義它的確切表示,但在通用代碼中沒有用時,這很有用,因爲你希望double是十進制值而不是一些十六進制模式。
它用來表示一個十六進制浮點數字。
甲浮點文字具有以下部分:一個整數部分, 一個十進制或十六進制點,一個小數部分,指數,和一個型後綴(用ASCII週期 字符表示)。 A 浮點數可以寫成十進制值,也可以寫成十六進制值 。對於十進制文字,指數(如果存在)是 ,由ASCII字母e或E表示,後面跟隨可選的有符號整數 。 對於十六進制文字,指數始終是必需的,並且 由ASCII字母p或P表示,後面跟有可選的 有符號整數。
從http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#230798
這是一個十六進制浮點文字和語法是:*號0X *尾數* p *指數。有關說明,請參閱blog。
十六進制浮點數,也許? – 2011-12-22 11:30:08
「p」表示「power」(?)爲「e」可能被誤解爲十六進制符號(?) – moala 2011-12-22 15:30:16