读写NSDecimalNumber

时间:2015-06-10 09:24:38

标签: ios objective-c nsdecimalnumber

我在读取和写入NSDecimalNumbers时遇到问题。说我有这个十进制数字:

NSDecimalNumber *myNumber; // this is 123,23

然后我读取它的值并将其显示在textField

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

它在textField中显示如下:" 123.23",注意点而不是逗号。如果我再次尝试将其读入属性,则排除小数。 123是唯一被阅读的内容:

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

但如果我使用UIKeyboardTypeDecimalPad和逗号在键盘上写123,23,它就可以了。这是为什么?

谢谢!

4 个答案:

答案 0 :(得分:1)

格式化十进制数是个问题。通常,您必须使用%@,而不是仅使用myNumber与使用[NSDecimalNumber description]的{​​{1}}。这将本地化小数分隔符。

[NSDecimalNumber descriptionWithLocale:]

如果您需要其他格式,例如限制小数位数或添加分组分隔符,您可以使用self.textField.text = [NSString stringWithFormat:@"%@", [myNumber descriptionWithLocale:[NSLocale currentLocale]]; ,但NSNumberFormatter首先将所有数字转换为NSNumberFormatter,因此您总会失去精确度。

格式double正在滚动您自己的格式化程序时,更强大的解决方案。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

请查看以下代码 -

var test = calc.sum(1,2);

答案 3 :(得分: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);