2015-06-10 63 views
0

我在讀取和寫入NSDecimalNumbers時遇到問題。說我有這個十進制數:讀取和寫入NSDecimalNumber

NSDecimalNumber *myNumber; // this is 123,23 

然後我讀它的價值是這樣,並顯示在一個文本框

self.textField.text = [NSString stringWithFormat:@"%@", myNumber]; 

它會看起來像這樣的文本字段:「123.23」,請注意點而不是逗號。如果我嘗試像這樣再次讀入屬性,則小數被排除。 123是被閱讀的唯一的事情:

myNumber = [NSDecimalNumber decimalNumberWithString:self.textField.text]; 

但如果我寫123,23使用UIKeyboardTypeDecimalPad鍵盤和逗號,它工作得很好。爲什麼是這樣?

謝謝!

回答

1

格式化十進制數字是一個問題。通常,您不必僅使用%@myNumber(使用[NSDecimalNumber description]),而必須使用[NSDecimalNumber descriptionWithLocale:]。這將使小數點分隔符本地化。

self.textField.text = [NSString stringWithFormat:@"%@", [myNumber descriptionWithLocale:[NSLocale currentLocale]]; 

如果需要其他格式,例如限制的小數位數或添加分組分隔符,你可以使用NSNumberFormatter,但是NSNumberFormatter所有數字轉換爲double第一,所以你將永遠失去精度。

當格式化NSDecimalNumber滾動自己的格式化程序時,更可靠的解決方案。

0
self.textField.text = [NSString stringWithFormat:@"%@,", myNumber]; 
+0

你錯過了%@後的逗號 –

0

請與下面的代碼檢查 -

self.textField.text = [NSString stringWithFormat:@"%@",[NSNumberFormatter localizedStringFromNumber:number numberStyle:NSNumberFormatterDecimalStyle]]; 
0
NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithString:@"120000"]; 
NSLocale *priceLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-in"]; 

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[currencyFormatter setLocale:priceLocale]; 
NSString *format = [currencyFormatter positiveFormat]; 
[currencyFormatter setPositiveFormat:format]; 

NSString *currencyString1 = [currencyFormatter stringFromNumber:price]; 
DLog(@"%@",currencyString1);