浮点类型数据四舍五入保留两位小数
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,所以就没有进行四舍五入。
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,所以就没有进行四舍五入。
相关文章推荐
- div+css
- ubuntu mysql5.6二进制安装
- 1002. A+B for Polynomials (25)
- python安装第三方库的疑惑
- poj3207 --Ikki's Story IV - Panda's Trick--强连通分量 & 2-sat & 判断可行性
- NOI 2005 聪聪和可可
- String....可变参与和String[]的差距
- 解决"com.android.builder.packaging.DuplicateFileException"
- Copy Constructor versus Cloning
- SQL命令类型
- windows 系统 MySQL_5.6.21安装教程
- 表单提交时,前端用js加密,后端用Java(struts2)解密
- 图像增强算法之 限制对比度自适应直方图均衡化算法原理
- zookeeper的简单使用
- java socket服务器客户端多线程小例子
- 在Java中,return null 是否安全, 为什么?
- mysql性能优化方案
- 在2D空间中使用四叉树实现碰撞检测
- PCB工艺要求
- RPi 2B IPC webcam server