gpt4 book ai didi

ios - 在 iOS 中使用 NSNumberFormatter 进行货币转换时遇到问题

转载 作者:行者123 更新时间:2023-11-28 18:38:16 25 4
gpt4 key购买 nike

我有一个 UITextField,它在我的应用程序中接收来自用户的数字输入。然后使用我的 shouldChangeCharactersInRange 委托(delegate)方法中的 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;

导致这种异常转换的行是这一行:

modifiedValue = [formatter stringFromNumber:[NSNumber numberWithFloat:[modifiedValue floatValue]]];

谁能看出这是为什么?

最佳答案

在进行string->float转换时很可能是舍入错误。处理货币时不应使用 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

您还可以考虑让数字格式化程序变得宽松 - 通常有助于用户输入数据。

[formatter setLenient:YES];

关于ios - 在 iOS 中使用 NSNumberFormatter 进行货币转换时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com