2015-06-10 64 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);