[英]Floating Point Numbers
這似乎是一個非常簡單的問題,但我只是想清除我的疑問。 我正在看其他開發人員編寫的代碼。 有些計算涉及浮點數。
示例: Float fNotAvlbl = new Float(-99);
他為什么要創建一個新對象? 如果我們執行Float fNotAvlbl = -99;
會發生什么? (-99用作標志,指示不適用)在代碼的后面,我們定義:
fltValue1 = 0.00f;
fltValue2 = 0.00f;
並使用返回float的方法調用填充這兩個值。 之后,我們再次將這兩個值轉換為Float對象:
fltVal1 = new Float(fltValue1);
fltVal2 = new Float(fltValue2);
然后比較if(fltVal1.compareTo(fNotAvailable) == 0) do something.
這是因為compareTo期望包裝器類對象嗎?
抱歉,這是一個真正的基本問題。
Float.valueOf(..)
。 Float fNotAvlbl = -99;
依賴自動裝箱,自動裝箱僅在Java 5中添加,因此較舊的代碼無法使用它。 -99
作為浮點值表示“不適用”確實非常糟糕。 使用null
或Float.Nan
fltVal1.compareTo(fNotAvailable) == 0
表示與fltValue1==fltValue2
關於compareTo()
與==
進行比較的主題
float a = Float.NaN;
float b = Float.NaN;
System.out.println(a + " == " + b + " is " + (a == b));
System.out.println(a + ".compareTo(" + b + ") is " + ((Float) a).compareTo(b));
float c = -0.0f;
float d = 0.0f;
System.out.println(c + " == " + d + " is " + (c == d));
System.out.println(c + ".compareTo(" + d + ") is " + ((Float) c).compareTo(d));
版畫
NaN == NaN is false
NaN.compareTo(NaN) is 0
-0.0 == 0.0 is true
-0.0.compareTo(0.0) is -1
compareTo比較二進制表示形式(將所有NaN值標准化為相同之后),因為-0.0f和0.0f的二進制表示形式不同,compareTo不會返回0。除了使用floatToIntBits()
,代碼中沒有其他特殊處理。並使用==
比較該instea自由度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.