NSDecimalNumber 金融经常用到的万元逗号和角分点对应的方法

 

在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。比如字符串转换成float,两个float运算再转成字符串的时候就可能会丢失精度。

解决这个问题就用到了苹果的 NSDecimalNumber 这个类 可以将两个字符串进行运算并且自动返回字符串,解决了同学们转换类型计算丢失进度的烦恼

 

可参考:https://www.cnblogs.com/niceMan/p/5910528.html

 

下面提供两个添加(去除)千位符的方法

10000 --> 10,000

- (NSString *)strmethodComma
{
    NSString *string = self;
    if (string.length <= 3) {
        return string;
    }
    NSString *sign = nil;
    if ([string hasPrefix:@"-"]||[string hasPrefix:@"+"]) {
        sign = [string substringToIndex:1];
        string = [string substringFromIndex:1];
        
    }
    
    NSArray *signs = [string componentsSeparatedByString:@"."];
    string = signs[0];
    if (string.length <= 3 && signs.count == 2) {
        string = [string stringByAppendingString:[NSString stringWithFormat:@".%@",signs[1]]];
        if (sign) {
            string = [sign stringByAppendingString:string];
        }
        return string;
    }
    
    NSString *pointLast = [string substringFromIndex:[string length]-3];
    NSString *pointFront = [string substringToIndex:[string length]-3];
    
    NSInteger commaNum = ([pointFront length]-1)/3;
    NSMutableArray *arr = [NSMutableArray array];
    for (int i = 0; i < commaNum+1; i++) {
        NSInteger index = [pointFront length] - (i+1)*3;
        NSInteger leng = 3;
        if(index < 0)
        {
            leng = 3+index;
            index = 0;
            
        }
        NSRange range = {index,leng};
        NSString *stq = [pointFront substringWithRange:range];
        [arr addObject:stq];
    }
    NSMutableArray *arr2 = [NSMutableArray array];
    for (NSInteger i = [arr count]-1; i>=0; i--) {
        
        [arr2 addObject:arr[i]];
    }
    [arr2 addObject:pointLast];
    NSString *commaString = [arr2 componentsJoinedByString:@","];
    if (sign) {
        commaString = [sign stringByAppendingString:commaString];
    }
    if (signs.count == 2) {
        commaString = [commaString stringByAppendingString:[NSString stringWithFormat:@".%@",signs[1]]];
    }
    return commaString;
    
}

10,000,003.050 -> 1,000.000305

- (NSString *)wanStrmethodComma
{
    NSString *str = [self stringByReplacingOccurrencesOfString:@"," withString:@""];
    NSDecimalNumber *totalStr = [NSDecimalNumber decimalNumberWithString:str];
    NSDecimalNumber *wanStr = [NSDecimalNumber decimalNumberWithString:@"10000"];
    NSDecimalNumber *total = [totalStr decimalNumberByDividingBy:wanStr];
    str = [total.stringValue strmethodComma];
    
    return str;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值