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