iOS科学计算,舍入规则

科学计数法

项目在遇到金额问题的时候,无论用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];

你可能感兴趣的:(iOS科学计算,舍入规则)