最新消息:文章中包含代码时,请遵守代码高亮规范!

iOS – 数据“四舍五入”和“只舍”的处理

iOS user 85浏览 0评论

大家都会在开发中遇到, 一个 float或者 double 类型的小数上, 有时候会有一个精度的丢失, 造成数据不准确. 尤其是在涉及到一些支付的项目, 都要求比较精确。

12545710-8b0b5ae516e0e5ac.png

通过NSDecimalNumber和NSDecimalNumberHandler的使用可以快速的对数据处理.

参数说明:
decimalNumberHandlerWithRoundingMode:对数据处理的方式
scale:小数点后几位

12545710-32870dc74b2904e0.png

根据官方文档说明, 枚举值分析:
NSRoundPlain, 四舍五入
NSRoundDown, 只舍不入
NSRoundUp, 只入不舍
NSRoundBankers 四舍六入, 中间值时, 取最近的,保持保留最后一位为偶数

对数据四舍五入的封装:

-(NSString *)notRounding:(float)price afterPoint:(int)position{    
    NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];    
    NSDecimalNumber *ouncesDecimal;    
    NSDecimalNumber *roundedOunces;
    ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];
    roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];    
    return [NSString stringWithFormat:@"%@",roundedOunces];
}

参数说明:
price:要处理的值
position:四舍五入的小数点后几位

这舍的话只需要改变decimalNumberHandlerWithRoundingMode的枚举就行了。

这样我们对数据的处理就方便多了。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/25369.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Miya的打赏,我们会更加努力!    如果您想成为作者,请点我

发表我的评论
取消评论

表情