2009-10-22 94 views
2

仔細閱讀這個問題,因爲我是不要求如何擺脫尾隨零,這很容易。爲什麼浮點數只有在整數時纔會拖尾?

我在問的是爲什麼123d變成「123.0」?

IEEE 64位浮點數可以完全表示從0到2^52的整數,所以這不是精度上的損失,而是Double.toString()的實現過程中的決定。

我的問題是他們爲什麼做這個決定,他們這樣做?他們爲什麼不打印123?

回答

8

其中,它導致了表達的清晰度 - 當簡單的算術運算後,似乎是一個整數值的用戶突然在小數點後突然出現一串數字,經常會感到困惑。

+0

打印一個int,看起來像一個int。打印一張雙面,看起來像雙。世界是有道理的。 – 2009-10-22 22:14:41

+0

發生這種情況時我會感到害怕。數值方法教給我的確切原因,在這種情況下。 – 2009-10-22 22:30:13

+0

我想這是要求太多以獲得一致的「數字」抽象 – Pyrolistical 2013-05-22 20:25:10

5

這樣,它會更容易看出它實際上是一個雙精度值,而不是整數,我猜:)。

0

toString是一種非常特殊的方法。它不會被任何想象的延伸是指「用戶顯示字符串」(儘管它常常不謀而合,與「字符串的」 toString方法)

它實際上是爲開發者能夠立即神交對象是什麼(主要作爲調試輸出)。

對於用戶要打印的任何內容,無論如何都應該通過格式化程序進行渲染,以確保正確的最大大小,小數點數和小數點指示符(。或)。

在Java代碼中,0.0會自動轉換爲double,因此雙精度打印爲0.0意味着「這是雙精度」是非常合理的。我有點驚訝它不會以「f」或「d」結束,但實際上這實際上很煩人,因爲int的toString真的非常有用,並且不斷地跟着它以「i」會生氣大家都離開了

+0

是的,op應該採用格式化的方法。 – 2009-10-22 23:59:24

相關問題