sye*_*dfa 0 uitextfield nsnumberformatter ios uitextfielddelegate
我有一个UITextField,它接收我的应用程序中用户的数字输入.然后,在我的shouldChangeCharactersInRange委托方法中,使用NSNumberFormatter将此文本字段中的值转换为货币格式.当我输入数字"12345678"时,数字被正确转换为$ 123456.78(数字一次输入一位数,到目前为止,一切顺利).但是,当我在此之后输入另一个数字(例如9),而不是显示"1234567.89"时,会显示数字"1234567.88".如果我之后输入另一个数字,之后会有一个完全不同的数字(我在应用程序中使用数字键盘输入数字.这是我的代码:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
modifiedValue = [formatter stringFromNumber:[NSNumber numberWithFloat:[modifiedValue floatValue]]];
textField.text = modifiedValue;
Run Code Online (Sandbox Code Playgroud)
导致这种异常转换的行是这样的:
modifiedValue = [formatter stringFromNumber:[NSNumber numberWithFloat:[modifiedValue floatValue]]];
Run Code Online (Sandbox Code Playgroud)
谁能明白为什么会这样?
执行string-> float转换时,可能会出现舍入错误.处理货币时不应使用浮点数.你可以NSDecimalNumber改用.
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
// Below 2 lines if converting from a "currency" string
NSNumber *modifiedNumber = [formatter numberFromString:modifiedValue]; // To convert from the currency string to a number object
NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithDecimal:[modifiedNumber decimalValue]];
// OR the below line if converting from a non-currency string
NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:modifiedValue];
modifiedValue = [formatter stringFromNumber:decimal]; // Convert the new decimal back to a currency string
Run Code Online (Sandbox Code Playgroud)
您还可以考虑使数字格式器宽松 - 通常有助于用户输入的数据.
[formatter setLenient:YES];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4055 次 |
| 最近记录: |