读写一个 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
时更强大的解决方案是滚动您自己的格式化程序。
我在读写 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
时更强大的解决方案是滚动您自己的格式化程序。