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

时间:2016-01-27 22:19:59

标签: objective-c nsstring type-conversion nsdecimalnumber

我目前正在使用以下方法在舍入后将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];
}

2 个答案:

答案 0 :(得分:1)

使用[NSDecimalNumber decimalNumberWithString:],如下所示:

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

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

答案 1 :(得分:1)

看看NSDecimalNumberHandler和NSDecimalNumber&#39>

-decimalNumberByRoundingAccordingToBehavior:

方法

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

无需编辑输入字符串。