NSDecimalNumber類型數據的基本運算和比較大小

開發過程中遇到的問題,從服務器拿的數據NSString類型的,然後轉化成CGFloat類型的,數據的值就不準確了,沒辦法,就找了下資料,找到了蘋果有專門的API,針對金融貨幣單位,希望可以解決有遇到同樣問題的人。
一、NSDecimalNumber的基本運算

    NSDecimalNumber *decOneNum = [[NSDecimalNumber alloc] initWithFloat:oneNum];

    NSDecimalNumber *decTwoNum = [[NSDecimalNumber alloc] initWithFloat:twoNum];

    NSDecimalNumber *resultNum = [[NSDecimalNumber alloc] init];
     /**
     初始化方法參數介紹
     roundingMode 舍入方式
     (
     		NSRoundPlain, 四捨五入
			NSRoundDown, 只舍不入
			NSRoundUp, 只入不捨
			NSRoundBankers 四捨六入, 中間值時, 取最近的,保持保留最後一位爲偶數
	  )
     scale 小數點後舍入值的位數。例如:2的話就代表保留小數點後2位小數
     exact 精度錯誤處理;YES:如果出現錯誤將會引發異常,NO:忽略錯誤。
     overflow 溢出錯誤處理;BOOL值意思同上
     underflow 下溢錯誤處理;BOOL值意思同上
     divideByZero 除以0的錯誤處理;BOOL值意思同上,不過YES的的時候會自動捨去末尾 的0。
     NSDecimalNumberHandler對象
     */

    NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain

                                                                                                      scale:2

                                                                                           raiseOnExactness:NO

                                                                                            raiseOnOverflow:NO

                                                                                           raiseOnUnderflow:NO

                                                                                        raiseOnDivideByZero:YES];
    // 加法
    resultNum = [decOneNum decimalNumberByAdding:decTwoNum withBehavior:roundingBehavior];
    // 減法
    resultNum = [decOneNum decimalNumberBySubtracting:decTwoNum withBehavior:roundingBehavior];
    // 乘法
    resultNum = [decOneNum decimalNumberByMultiplyingBy:decTwoNum withBehavior:roundingBehavior];
    // 除法
    resultNum = [decOneNum decimalNumberByDividingBy:decTwoNum withBehavior:roundingBehavior];
二、NSDecimalNumber類型參數的大小比較
	NSDecimalNumber *decOneNum = [[NSDecimalNumber alloc] initWithFloat:oneNum];
    NSDecimalNumber *decTwoNum = [[NSDecimalNumber alloc] initWithFloat:twoNum];

	 if ([decOneNumcompare:decTwoNum] == NSOrderedAscending) {
        NSLog(@"decOneNum  < decTwoNum");
    } else if ([decOneNumcompare:decTwoNum] ==NSOrderedDescending){
        NSLog(@"decOneNum  >  decTwoNum");
    }else if ([decOneNum compare:decTwoNum] == NSOrderedSame){
        NSLog(@"decOneNum  =  decTwoNum");
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章