浮点类型数据四舍五⼊保留两位⼩数
-(float)roundFloat:(float)price{
return (floorf(price*100 +0.5))/100;
}
这个基本能够确保最后是四舍五⼊并且能保留两位⼩数。
下⾯再说说这个曲折的过程,⾸先我想到的是⽤ios⾥⾯⾃带的roud⽅法,
-(float)roundFloat:(float)price{
return roundf(price);
}
但是如下举例
float test =23.625;
float test2 =23.6250;
float test3 =23.6251;
test = [self roundFloat:test];
test2 = [self roundFloat:test2];
test3 = [self roundFloat:test3];
NSLog(@"test:%.2f",test);
NSLog(@"test2:%.2f",test2);
NSLog(@"test3:%.2f",test3);
得出结果:
test:24.00
test2:24.00
test3:24.00
很显然不是我想要的效果,然后改⽅法
-(float)roundFloat:(float)price{
return roundf(price*100)/100;
}
这个⽅法貌似可⽤,但是之前我不知道造了什么数据,恍惚之间觉得它好像也有问题,再看另外⼀个⽅法
-(float)roundFloat:(float)price{
NSString *temp = [NSString stringWithFormat:@"%.7f",price];
NSDecimalNumber *numResult = [NSDecimalNumber decimalNumberWithString:temp];
NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
decimalNumberHandlerWithRoundingMode:NSRoundBankers
scale:2
raiseOnExactness:NO
浮点型变量floatraiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
return [[numResult decimalNumberByRoundingAccordingToBehavior:roundUp]floatValue];
}
⽤这个⽅法格式化上⾯的浮点数结果如下:
test:23.62
test2:23.62
test3:23.63
可以看到test ,test2 没有做四舍五⼊,只有 test3 是四舍五⼊了,从数据上分析,不难发现,原因是test3⾥⾯的第三个⼩数位后⾯有⼀个1,⽽test及test2后⾯没有⼩数位或者为0,所以就没有进⾏四舍五⼊。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论