Ios 将包含小数点的字符串四舍五入为两位小数
给定NSString“1.625”,我想将其四舍五入为“1.63”。 我到底是怎么做到的 这就是我现在拥有的:Ios 将包含小数点的字符串四舍五入为两位小数,ios,decimal,Ios,Decimal,给定NSString“1.625”,我想将其四舍五入为“1.63”。 我到底是怎么做到的 这就是我现在拥有的: NSString *rateString = [NSString stringWithFormat:@"%.2f", [@"1.63" doubleValue]]; NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; ite
NSString *rateString = [NSString stringWithFormat:@"%.2f", [@"1.63" doubleValue]];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
item.rate = [f numberFromString:rateString];;
但是,doubleValue将1.625转换为1.624999999
因此,当我用@“%.2f”将它四舍五入到两位小数时,我的结果是1.62 如果你想四舍五入到最接近的百分之一,乘以100,增加0.5,再除以100。然后得到该值的下限
double rate = [@"1.625" doubleValue];
double roundedNumber = floor(rate * 100 + 0.5) / 100;
NSString *rateString = [NSString stringWithFormat:@"%.2f", roundedNumber];
NSLog(@"rate: %@", rateString);
运行此命令,然后输出结果:
2015-01-13 15:41:08.702 Sandbox[22027:883332] rate: 1.63
如果您需要高精度,您真正需要的是
NSDecimalNumber
类,如果不需要配置所有详细信息,则可以与NSDecimalNumberHandler
类耦合,如果需要绝对控制,则可以与nsdecimalnumberhaviors
类耦合。这是保留2位十进制数字(handler init中的“scale”值)的最快解决方案:
NSDecimalNumber文档:
NSDecimalNumberHandler文档:
NSDecimalNumberBehaviors文档:
使用
NSDecimalNumber
而不是使用double
可能重复查找。
NSDecimalNumberHandler *handler = [[NSDecimalNumberHandler alloc]initWithRoundingMode:NSRoundBankers
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
[NSDecimalNumber setDefaultBehavior:handler];
NSString *string = @"1.63";
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string];