我目前正在使用以下方法在舍入后将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];
}
答案 0 :(得分:1)
使用[NSDecimalNumber decimalNumberWithString:]
,如下所示:
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"123.456"];
小数位数仅影响数字的字符串表示形式;一旦数字存储在NSDecimalNumber
对象中,就可以按照您想要的任何方式将其格式化为字符串。
答案 1 :(得分:1)
看看NSDecimalNumberHandler和NSDecimalNumber&#39>
-decimalNumberByRoundingAccordingToBehavior:
方法
您可以使用未编辑的字符串创建NSDecimalNumber,然后根据您在NSDecimalNumberHandler上设置的规则创建一个新的NSDecimal数字。
无需编辑输入字符串。