前言
public class NSNumber : NSValue
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)