2012-11-04 140 views
2

如果我使用以下代碼:不正確的結果值

- (NSString*)formatToCurrency:(float)inFloat { 
    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
    [currencyFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    [currencyFormatter setMaximumFractionDigits:2]; 
    [currencyFormatter setLocale:[NSLocale currentLocale]]; 

    NSNumber *x = [NSNumber numberWithFloat:inFloat]; 
    return [NSString stringWithFormat:@" %@", [currencyFormatter stringFromNumber:x]]; 
} 

然後調用代碼時傳遞203500,收到輸出:$ 203,500.02。

我很想聽聽關於正在發生的事情的一些想法。

感謝,

馬特

編輯:XCode中被報告203500當我使用調試器觀看它,但是當我轉換的浮到一個NSString,它也將顯示203500.018。這意味着問題出現在浮點數中,而不是在NSNumberFormatter中。

+0

我不能再現這個結果,我得到'203,500.00'。 – dasblinkenlight

+0

舉一個@vikingosegundo的例子..參見http://stackoverflow.com/questions/856019/localize-currency-for-iphone –

+2

再試一次,只是將所有出現的'float'改爲'double'。 –

回答

6
+3

對於'NSDecimal'爲+1,但如果不允許小數部分美分,更好的解決方案是以美分爲單位編碼美元數量,並使用整數值類型來存儲 – yfrancis

+0

謝謝。我完全沒有理解這一點。 –

0

顯然,我有很多學習這一點。但面臨進一步惡化的風險,我會報告一件能幫助我的事情。

我有這個代碼:

self.myDollarFormat.roundingIncrement = [NSNumber numberWithFloat:roundingInc]; 
return [self.myDollarFormat stringFromNumber:[NSNumber numberWithFloat: dollars]]; 

而且發現638198.2與roundingIncrement 0.1正在產生@ 「$ 638,198.21」。

我改變了我的代碼使用double而不是float,然後我得到了預期的結果。

self.myDollarFormat.roundingIncrement = [NSNumber numberWithDouble: roundingInc]; 
return [self.myDollarFormat stringFromNumber:[NSNumber numberWithDouble: dollars]]; 

我推遲那些知道更多,但我想我至少會提到這對我有效。祝你好運。