iOS NSNumber 加、減、乘、除

NSNumber 加、減、乘、除 包括 根據(jù)需求轉(zhuǎn)換字符串(四舍五入、貨幣數(shù)字、百分比。。。。)

開發(fā)中會遇到一些字符串顯示看似亂碼的情況 比如 2.7E9292
或者說顯示的數(shù)字和后臺的對不上 比如后端返回2.938 前端顯示2.938888888
解決方法

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, YQOPERATORS){
    YQ_Add,//加
    YQ_Mul,//乘
    YQ_Sub,//減
    YQ_Div//除
};
@interface NSNumber (YQ)

//無格式,四舍五入
- (NSString *)changeToumberFormatterNoStyle;
//小數(shù)型,
- (NSString *)changeToNumberFormatterDecimalStyle;
//貨幣型,
- (NSString *)changeToNumberFormatterCurrencyStyle;
//百分比型
- (NSString *)changeToNumberFormatterPercentStyle;
//科學(xué)計數(shù)型,
- (NSString *)changeToNumberFormatterScientificStyle;
//全拼
- (NSString *)changeToNumberFormatterSpellOutStyle;


/// 運算方法
/// @param one 第一個數(shù)
/// @param opera 運算方式
/// @param two 第二個數(shù)
+ (NSNumber *)getResult:(NSNumber *)one  operators:(YQOPERATORS)opera num:(NSNumber *)two;

@end

NS_ASSUME_NONNULL_END
//
//  NSNumber+YQ.m
//  yaqu
//
//  Created by 劉浩宇 on 2020/11/19.
//  Copyright ? 2020 nalovy. All rights reserved.
//

#import "NSNumber+YQ.h"

@implementation NSNumber (YQ)

//
//    NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle, //無格式,四舍五入,原值2.7999999999,直接輸出3
//    NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle, //小數(shù)型,保留小數(shù)輸出2.8
//    NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle, //貨幣型,加上了人民幣標(biāo)志,原值輸出¥2.8
//    NSNumberFormatter
//    NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,  //百分比型,本身數(shù)值乘以100后用百分號表示,輸出280%
//    NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle, //科學(xué)計數(shù)型,原值表示,輸出2.799999999E0
//    NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle  //全拼,原值的中文表示,輸出二點七九九九...
- (NSString *)changeStyle:(NSNumberFormatterStyle)style {
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.numberStyle = style;
    return [formatter stringFromNumber:self];
}

- (NSString *)changeToumberFormatterNoStyle {
    return [self changeStyle:NSNumberFormatterNoStyle];
}

- (NSString *)changeToNumberFormatterDecimalStyle {
    return [self changeStyle:NSNumberFormatterDecimalStyle];
}

- (NSString *)changeToNumberFormatterCurrencyStyle {
    return [self changeStyle:NSNumberFormatterCurrencyStyle];
}

- (NSString *)changeToNumberFormatterPercentStyle {
    return [self changeStyle:NSNumberFormatterPercentStyle];
}

- (NSString *)changeToNumberFormatterScientificStyle {
    return [self changeStyle:NSNumberFormatterScientificStyle];
}

- (NSString *)changeToNumberFormatterSpellOutStyle {
    return [self changeStyle:NSNumberFormatterSpellOutStyle];
}

+ (NSNumber *)getResult:(NSNumber *)one operators:(YQOPERATORS)opera num:(NSNumber *)two {
    NSDecimalNumber *resultNum = [[NSDecimalNumber alloc] init];
    NSDecimalNumber *A = [NSDecimalNumber decimalNumberWithDecimal:one.decimalValue];
    NSDecimalNumber *B = [NSDecimalNumber decimalNumberWithDecimal:two.decimalValue];
    NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
                                                           scale:2
                                                raiseOnExactness:NO
                                                 raiseOnOverflow:NO
                                                raiseOnUnderflow:NO
                                             raiseOnDivideByZero:NO];

    if (opera == YQ_Add) {
        resultNum = [A decimalNumberByAdding:B withBehavior:roundingBehavior];
    }else if (opera == YQ_Sub) {
        // 減法
        resultNum = [A decimalNumberBySubtracting:B withBehavior:roundingBehavior];
    }else if (opera == YQ_Mul) {
        resultNum = [A decimalNumberByMultiplyingBy:B withBehavior:roundingBehavior];
    }else if (opera == YQ_Div) {
        // 除法
        resultNum = [A decimalNumberByDividingBy:B withBehavior:roundingBehavior];
    }
    return resultNum;
}


@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容