将 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 数字。
无需编辑您的输入字符串。
我目前正在使用以下方法将 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 数字。
无需编辑您的输入字符串。