2012-07-31 132 views
2

爲什麼resultNSOrderedDescendingNSDecimalNumber比較失敗

NSDecimalNumber *decimal = [[NSDecimalNumber alloc] initWithString:@"2.6"]; 

NSComparisonResult result = [decimal compare:[NSNumber numberWithFloat:2.6]]; 
+1

我敢打賭這是一個內部舍入問題。你有沒有試過@「2.60」和2.6? – 2012-07-31 21:12:36

+0

感謝馬克。以爲我在使用NSDecimalNumber時很聰明,但是這個四捨五入的錯誤事物運行得更深。結束使用NSDecimal。 – Gonzalo 2012-07-31 22:00:24

回答

3

2.6不能精確表示爲浮點數,但NSDecimal可以完全代表這個值(這就是爲什麼我們首先需要NSDecimals)。

根據IEEE 754 Calculator2.6被轉換到2.5999999046325684,其小於2.6,因此作爲比較NSOrderedDescending

+0

使用NSDecimal就像這樣工作 – Gonzalo 2012-07-31 21:53:18

+0

使用NSDecimal作品。我也使用得心應手的CPDecimalFromString從http://stackoverflow.com/questions/2035421/creating-nsdecimal – Gonzalo 2012-07-31 22:01:39