3 回答

TA貢獻1827條經驗 獲得超8個贊
因為Java使用IEEE浮點算術標準(IEEE 754)來定義-0.0和使用它。
可表示的最小數字在次正規有效位中沒有1位,并且被稱為正負零,由正負號確定。它實際上表示在零到相同符號的最小可表示非零數字之間的范圍內將數字四舍五入為零,這就是為什么它有一個符號,以及為什么它的倒數+ Inf或-Inf也有一個符號。
您可以通過添加解決特定的問題 0.0
例如
Double.toString(value + 0.0);
請參閱:Java浮點數復雜度
負零
...
(-0.0)+ 0.0-> 0.0的 運算
--
“-0.0”是當在負浮點數浮點運算結果,以便接近0所產生它不能正常地表示。

TA貢獻1995條經驗 獲得超2個贊
原始浮點值為什么可以是-0.0?
浮點數使用IEEE 754標準存儲在內存中,這意味著可能存在舍入錯誤。您永遠無法使用有限的資源存儲無限精度的浮點數。
您永遠不要測試浮點數是否等于==,即不要寫這樣的代碼:
if (a == b)
在哪里a和b在浮動。由于舍入錯誤,這兩個數字可能以不同的值存儲在內存中。
您應該定義要使用的精度:
private final static double EPSILON = 0.00001;
然后根據您需要的精度進行測試
if (Math.abs(a - b) < epsilon)
因此,在您的情況下,如果要測試給定精度的浮點數等于零:
if (Math.abs(a) < epsilon)
而且,如果要在GUI中輸出數字時格式化數字,則可以查看以下文章和NumberFormat類。
添加回答
舉報