有人问过类似的问题,但我发现所提供的解决方案不适用于最新的iOS SDK,也不完全适用于这种特殊情况。
我使用NSNotification调用一个方法,该方法在使用按钮输入的数字输入时使用UILabel中的分组符号对数字进行格式化。它对整数和小数也很有用--只要小数点后不输入零。例如,如果输入了2000,则显示为2,000,因为输入很好。如果输入了23.345,也会显示得很好。对这些数字所作的任何计算都是正确的。但要进入0.0001或0.2340007是不可能的!它只是不会在小数点后面加任何零。
我从堆栈溢出的另一篇文章中得到了最初的代码想法:
NSString *currentText = [display_ text];
currentText = [currentText stringByReplacingOccurrencesOfString:@","
withString:@""];
currentText = [currentText stringByReplacingOccurrencesOfString:@"."
withString:@"."];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@","];
[formatter setDecimalSeparator:@"."];
[formatter setMaximumFractionDigits:10];
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:currentText];
NSString *finalText = [formatter stringFromNumber:number];
NSString *lastChar = [currentText substringFromIndex:[currentText length] - 1];
if ([lastChar isEqualToString:@"."])
{
finalText = [finalText stringByAppendingString:@"."];
}
[display_ setText: finalText];
[formatter release];对格式化程序的参数进行任何欺骗(我已经尝试过)都不允许在小数点之后输入零。
发布于 2011-09-25 14:11:06
你为什么要用“。”用"."?在数字实例化之后,您在调试器中看到了什么?
我从来没有和NSDecimalNumber合作过,但在一段时间前我已经和双打打过交道了。我建议解决这个问题。用硬编码值实例化number,格式化它并将其写入日志文件.如果这不起作用,试试下面的代码,它在我的应用程序中可以正常工作,有双值。我正在使用德国地区设置,但这不应该是重点。
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
[formatter setAllowsFloats:TRUE];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumSignificantDigits:20];
[formatter setMaximumSignificantDigits:20];
[formatter setMinimumFractionDigits:0];
[formatter setMaximumFractionDigits:5];
NSLocale* locale = [NSLocale currentLocale];
[formatter setLocale:locale];
NSNumber* number = [NSNumber numberWithDouble:1000.0123f];
myTextField.text = [formatter stringFromNumber:number];如果你的代码已经起作用了,
https://stackoverflow.com/questions/7543189
复制相似问题