科学计数法
项目在遇到金额问题的时候,无论用float
还是double
结果都是会有误差的。这时候就需要用科学计数法。在iOS
中就是用NSDecimalNumber
这个类
基本使用
/*
typedef NS_ENUM(NSUInteger, NSRoundingMode) {
NSRoundPlain, // 四舍五入
NSRoundDown, // 只舍不入
NSRoundUp, // 只入不舍
NSRoundBankers // 这个是特殊的四舍五入。保留位数的后一位为5时,根据保留位数的奇偶性来确定舍入规则。例如:0.235保留两位小数,5前面为3,奇数要进1,结果为0.24。如果是0.245,5前面为4,偶数要舍,结果为0.24。
};
// scale 保留几位小数
// Exactness:进度异常、Overflow:向上溢出、Underflow:向下溢出、DivideByZero:除数为0。当参数为YES出错会抛出异常,为NO时忽略异常。返回nil.
*/
NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundUp scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
NSDecimalNumber *A = [NSDecimalNumber decimalNumberWithString:@"0.525"];
NSDecimalNumber *B = [NSDecimalNumber decimalNumberWithString:@"2"];
// 乘 1.05
NSDecimalNumber *mulNum = [A decimalNumberByMultiplyingBy:B withBehavior:roundUp];
// 和 2.52
NSDecimalNumber *sum = [A decimalNumberByAdding:B withBehavior:roundUp];
// 差 -1.48
NSDecimalNumber *jian = [A decimalNumberBySubtracting:B withBehavior:roundUp];
// 商 0.26
NSDecimalNumber *div = [A decimalNumberByDividingBy:B withBehavior:roundUp];
// 幂运算 0.14
NSDecimalNumber *square = [A decimalNumberByRaisingToPower:3 withBehavior:roundUp];
// 指数运算 200
NSDecimalNumber *zhishu = [B decimalNumberByMultiplyingByPowerOf10:2 withBehavior:roundUp];