您的位置:首页 > 其它

浮点类型数据四舍五入保留两位小数

2016-09-12 15:27 543 查看
-(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 = [selfroundFloat:test];
test2 = [selfroundFloat:test2];
test3 = [selfroundFloat: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 = [NSStringstringWithFormat:@"%.7f",price];

    NSDecimalNumber *numResult = [NSDecimalNumberdecimalNumberWithString:temp];

    NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler

                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers
                                      scale:2
                                      raiseOnExactness:NO
                                      raiseOnOverflow:NO
                                      raiseOnUnderflow:NO
                                      raiseOnDivideByZero:YES];

    return [[numResultdecimalNumberByRoundingAccordingToBehavior:roundUp]floatValue];
}

用这个方法格式化上面的浮点数结果如下:

 test:23.62
 test2:23.62
 test3:23.63
可以看到test ,test2 没有做四舍五入,只有 test3 是四舍五入了,从数据上分析,不难发现,原因是test3里面的第三个小数位后面有一个1,而test及test2后面没有小数位或者为0,所以就没有进行四舍五入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: