在小数点后NSNumberFormatter不会接受零

时间:2011-09-25 02:05:44

标签: ios nsnumber nsnumberformatter nsdecimalnumber decimal-point

我们已经提出了类似的问题,但我发现所提供的解决方案不适用于最新的iOS SDK,或者在这种特殊情况下并不完全适用。

我使用NSNotification调用一个方法,该方法使用UILabel中的分组符号格式化数字,因为它是使用按钮输入中的数字输入的。它也适用于整数和小数 - 只要在小数点后没有输入零。例如,如果输入2000,则显示为2,000,因为它输入正常。如果输入23.345,那也显示正常。对这些数字进行的任何计算都是正确的。但是不可能输入0.0001或0.2340007!它只是不会在小数点后加任何零。

我从stackoverflow的另一篇文章中得到了原始代码的想法:

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];

使用格式化程序的参数进行的任何重复(我已经尝试过)都允许在小数点后输入零。

1 个答案:

答案 0 :(得分:4)

为什么要替换“。”用“。”?在实例化数字后,您在调试器中看到了什么?

我从未与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];

如果您的代码已经有效,

  • 检查没有O而不是零
  • 删除此“。”上面提到的更换
  • 我发现设置一个语言环境明确地解决了一些问题(很久以前就记住了细节,但是你可以尝试一下)
  • 将NSDecimalNumber替换为NSNumber并将其提供给双值
  • 检查您的XIB文件并确保您的文本字段不执行任何其他格式化