读写一个 NSDecimalNumber

Read and write an NSDecimalNumber

我在读写 NSDecimalNumbers 时遇到了问题。假设我有这个十进制数:

NSDecimalNumber *myNumber; // this is 123,23

然后我像这样读取它的值并在文本字段中显示它

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

它在文本字段中看起来像这样:“123.23”,请注意点而不是逗号。如果我像这样再次尝试将其读入 属性 ,小数点将被排除在外。 123 是唯一被读取的内容:

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

但是如果我使用 UIKeyboardTypeDecimalPad 和 comma 用键盘写 123,23,它就可以正常工作。这是为什么?

谢谢!

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

请用下面的代码检查 -

self.textField.text = [NSString stringWithFormat:@"%@",[NSNumberFormatter localizedStringFromNumber:number numberStyle:NSNumberFormatterDecimalStyle]];
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);

格式化小数是个问题。通常,不只是使用 %@myNumber,它使用 [NSDecimalNumber description],你必须使用 [NSDecimalNumber descriptionWithLocale:]。这将本地化小数点分隔符。

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

如果您需要其他格式,例如限制小数位数或添加分组分隔符,您可以使用 NSNumberFormatter,但是 NSNumberFormatter 会先将所有数字转换为 double,所以你总是会失去精度。

格式化 NSDecimalNumber 时更强大的解决方案是滚动您自己的格式化程序。