将 NSString 转换为具有两位小数的 NSDecimalNumber 的预期方法是什么?

What's the intended way to turn a NSString into a NSDecimalNumber with two decimal places?

我目前正在使用以下方法将 NSString 数字(如 @"123.456")四舍五入后变成 NSDecimalNumber(如 123.46),但它感觉hacky。有没有更好的解决方案?

+ (NSDecimalNumber*)decimalNumberForString:(NSString*)str accuracy:(NSUInteger)accuracy
{
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.numberStyle = NSNumberFormatterNoStyle;
    formatter.maximumFractionDigits = accuracy;
    formatter.roundingMode = NSNumberFormatterRoundHalfUp;
    NSNumber *numberVersion = [formatter numberFromString:str];
    return [[NSDecimalNumber alloc] initWithDecimal:numberVersion.decimalValue];
}

使用[NSDecimalNumber decimalNumberWithString:],像这样:

NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"123.456"];

小数位数只影响数字的字符串表示;一旦数字存储在 NSDecimalNumber 对象中,它就可以按照您想要的任何方式格式化回字符串。

看看 NSDecimalNumberHandler 和 NSDecimalNumber 的

-decimalNumberByRoundingAccordingToBehavior:

方法。

您可以使用未经编辑的字符串创建一个 NSDecimalNumber,然后创建一个根据您在 NSDecimalNumberHandler 上设置的规则四舍五入的新 NSDecimal 数字。

无需编辑您的输入字符串。