3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
因?yàn)镴ava使用IEEE浮點(diǎn)算術(shù)標(biāo)準(zhǔn)(IEEE 754)來(lái)定義-0.0和使用它。
可表示的最小數(shù)字在次正規(guī)有效位中沒(méi)有1位,并且被稱為正負(fù)零,由正負(fù)號(hào)確定。它實(shí)際上表示在零到相同符號(hào)的最小可表示非零數(shù)字之間的范圍內(nèi)將數(shù)字四舍五入為零,這就是為什么它有一個(gè)符號(hào),以及為什么它的倒數(shù)+ Inf或-Inf也有一個(gè)符號(hào)。
您可以通過(guò)添加解決特定的問(wèn)題 0.0
例如
Double.toString(value + 0.0);
請(qǐng)參閱:Java浮點(diǎn)數(shù)復(fù)雜度
負(fù)零
...
(-0.0)+ 0.0-> 0.0的 運(yùn)算
--
“-0.0”是當(dāng)在負(fù)浮點(diǎn)數(shù)浮點(diǎn)運(yùn)算結(jié)果,以便接近0所產(chǎn)生它不能正常地表示。

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