ndp*_*osh 1 decimal-point nsnumber nsdecimalnumber nsnumberformatter ios
类似的问题也有人提出过,但我发现所提供的解决方案不适用于最新的 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];
Run Code Online (Sandbox Code Playgroud)
对格式化程序的参数进行再多的欺骗(我已经尝试过)都不允许在小数点后输入零。
为什么要替换“.” 和 ”。”?实例化数字后,您在调试器中看到什么?
我从未使用过 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];
Run Code Online (Sandbox Code Playgroud)
如果你的代码已经可以工作了,
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |