亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 浮點的顯示精度

Java 浮點的顯示精度

慕無忌1623718 2022-07-06 18:55:39
如果我們運行以下代碼:float f = 1.2345678990922222f;double d = 1.22222222222222222222d;System.out.println("f = " + f + "\t" + "d = " + d);它打?。篺 = 1.2345679   d = 1.2222222222222223文字 1.2345678990922222 中的長尾被忽略,但 1.22222222222222222222 中的長尾未被忽略(變量 d 中的最后一個十進制數字變為 3 而不是 2)。為什么?
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

float您在打印 a或 a時看到的位數是 Java 將和轉換為十進制double的默認規則的結果。floatdouble

Java 對浮點數的默認格式使用最少的有效十進制數字來區分數字和附近的可表示數字。1

在您的示例中,1.2345678990922222f源文本轉換為float值 1.2345678806304931640625,因為在該float類型中可表示的所有值中,該值最接近 1.2345678990922222。下一個較低值和下一個較高值是 1.23456776142120361328125 和 1.23456799983978271484375。

在打印這個值時,Java 只需要打印“1.2345679”,因為這足以讓我們float從它的鄰居 1.23456776142120361328125 和 1.23456799983978271484375 中挑選出 1.2345678806304931640625 的值。

對于您的double示例,1.22222222222222222222d轉換為 1.22222222222222232090871330001391470432281494140625??杀硎镜南乱粋€較低值和下一個較高值double是 1.2222222222222220988641083749826066195964813232421875 和 1.2222222222222225429533182250452227890491485595703125。如您所見,為了將 1.22222222222222232090871330001391470432281494140625 與其鄰居區分開來,Java 需要打印“1.2222222222222223”。

腳注

Java SE 10的規則可以在 java.lang.float 的文檔中找到toString(float d)。double文檔類似。這段話,最相關的部分用粗體表示,是:

返回 的字符串表示形式float argument。下面提到的所有字符都是 ASCII 字符。

  • 如果參數為 NaN,則結果為字符串“NaN”。

  • 否則,結果是一個字符串,表示參數的符號和大小(絕對值)。如果符號為負,則結果的第一個字符為 ' -' ( '\u002D');如果符號為正,則結果中不會出現符號字符。至于幅度m

    • 如果m為無窮大,則用字符“Infinity”表示;因此,正無窮產生結果“Infinity”,負無窮產生結果“-Infinity”。

    • 如果m為零,則用字符“0.0”表示;因此,負零產生結果“-0.0”,正零產生結果“0.0”。

    • 如果m大于等于 10 -3但小于 10 7,則表示為m的整數部分,以十進制形式表示,不帶前導零,后跟 ' .' ( '\u002E'),后跟一個或多個小數位表示m的小數部分。

    • 如果m小于 10 -3或大于或等于 10 7,則它以所謂的“計算機科學計數法”表示。令n為唯一整數,使得 10 n ≤ m < 10 n +1;然后讓am和 10 n的數學精確商,使得 1 ≤ a < 10。然后將大小表示為 a 的整數部分,作為一個十進制數字,后跟 ' .' ( '\u002E'),然后是十進制數字表示a的小數部分,后跟字母 'E' ( '\u0045'),后跟n表示為十進制整數,由方法 生成Integer.toString(int)

ma的小數部分必須打印多少位?必須至少有一個數字來表示小數部分,除此之外,必須有盡可能多的數字,但僅能將參數值與 type 的相鄰值區分開來float。也就是說,假設x是由該方法為有限非零參數f生成的十進制表示所表示的精確數學值。那么f必須是float最接近x的值;或者,如果兩個float值同樣接近x,則f必須是其中之一,并且f的有效位的最低有效位必須為 0。


查看完整回答
反對 回復 2022-07-06
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號