本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。 public class NSDecimalNumber : NSNumber
  • NSNumber 可以被赋值为各种数值类型。我们可以将一个 Int 类型的值直接传递给一个需要 NSNumber 类型参数或变量,Swift 会自动转换,如果两者类型不一致,会强制类型转换。

  • 从 NSNumber 赋值给 Swift 数值类型是,数值类型会根据会更具声明类型将 NSNumber 强制转换。

  • 1、Swift 数字类型 与 NSNumber 类型 的相互转换

        // Swift 数字 转 NSNumber
            let nsNum1:NSNumber = 1
            let nsNum2 = NSNumber(integer: 1)
            let nsNum3 = NSNumber(unsignedInteger: 1)
            let nsNum4 = NSNumber(float: 1.1)
            let nsNum5 = NSNumber(double: 3.2)
            let nsNum6 = NSNumber(bool: true)
        // NSNumber 转 Swift 数字
            let num1 = nsNum1.integerValue
            let num2 = nsNum2.unsignedIntegerValue
            let num3 = nsNum3.floatValue
            let num4 = nsNum4.doubleValue
            let num5 = nsNum5.boolValue

    2、比较两个 NSNumber 类型数据的大小

        let nsNum1:NSNumber = 10
        let nsNum2:NSNumber = 10.1
        // 判断两个值是否相等
        let bl:Bool = nsNum1.isEqualToNumber(nsNum2)
        // 判断两个值的大小
        let result:NSComparisonResult = nsNum1.compare(nsNum2)

    3、NSNumber 与 String 的相互转换

        // NSNumber 转换 NSString
        let str:String = NSNumber(float: 10.456).stringValue
        // NSString 转 NSNumber
        let nsNum:NSNumber = NSNumber(float: NSString(string: str).floatValue)

    4、加、减、乘、除、n次方

        let dcNun1 = NSDecimalNumber(string:"15.99")
        let dcNun2 = NSDecimalNumber(string:"29.99")
        let dcNun3 = NSDecimalNumber(string:"5.00")
        let dcNun4 = NSDecimalNumber(string:".90")
        let dcNun5 = NSDecimalNumber(string:"2.0")
        // 加     Adding
        let subtotal = dcNun1.decimalNumberByAdding(dcNun2)                         
        // 减     Subtracting
        let afterCoupon = subtotal.decimalNumberBySubtracting(dcNun3)               
        // 乘     Multiplying
        let afterDiscount = afterCoupon.decimalNumberByMultiplyingBy(dcNun4)        
        // 平均   Dividing
        let average = afterDiscount.decimalNumberByDividingBy(dcNun5)               
        // n 次方 RaisingToPower
        let averageSquared = average.decimalNumberByRaisingToPower(2)               

    5、四舍五入 运算

    enum NSRoundingMode : UInt { case RoundPlain // Round up on a tie 貌似取整 case RoundDown // Always down == truncate 只舍不入 case RoundUp // Always up 只入不舍 case RoundBankers // on a tie round so last digit is even 貌似四舍五入 // 90.7049 + 0.22 然后四舍五入 let roundUp = NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundBankers, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true) let subtotal = NSDecimalNumber(string:"90.7049") let discount = NSDecimalNumber(string:"0.22") // 加 保留 2 位小数 let total = subtotal.decimalNumberByAdding(discount, withBehavior: roundUp)