我在读写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,它就可以正常工作。为什么是这样?

谢谢!

最佳答案

格式化十进制数字是一个问题。通常,必须使用%@,而不仅仅是将myNumber与使用[NSDecimalNumber description][NSDecimalNumber descriptionWithLocale:]一起使用。这将本地化小数点分隔符。

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


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

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

关于ios - 读写NSDecimalNumber,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30752302/

10-11 22:12