大家都会在开发中遇到, 一个 float或者 double 类型的小数上, 有时候会有一个精度的丢失, 造成数据不准确. 尤其是在涉及到一些支付的项目, 都要求比较精确, 所以来说一说NSDecimalNumber, 顺便说一下保留小数的方法,NSDecimalNumberHandle
黄色标记处。改一下 参数即可
RoundingMode: 小数保留的类型
根据官方文档说明, 枚举值分析:
NSRoundPlain, 四舍五入
NSRoundDown, 只舍不入
NSRoundUp, 只入不舍
NSRoundBankers
原代码如下。:
+(NSString *)notRounding:(float)price afterPoint:(int)position{
NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain 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];
}