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

通过NSDecimalNumber和NSDecimalNumberHandler的使用可以快速的对数据处理.
参数说明:
decimalNumberHandlerWithRoundingMode:对数据处理的方式
scale:小数点后几位

根据官方文档说明, 枚举值分析:
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


微信打赏

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