1,金额格式化

(1)需要注意当金额或者数字为负数是需要单独处理

代码如下:

/*string 金额格式化(整数部分为NSNumberFormatter,小数部分为手动)*/

+ (NSString *)stringFamat:(NSString *)number
{
    if([number isEqualToString:@"--"]){
        return number;
    }
    if ([number doubleValue] > 0) {
        number = [NSString stringWithFormat:@"%.2f",[number doubleValue]];
        NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc]init];
        numFormatter.numberStyle = NSNumberFormatterDecimalStyle;
        
        NSNumber *num = [NSNumber numberWithDouble:[number doubleValue]];
        NSString *str = [NSString stringWithFormat:@"%@",[numFormatter stringFromNumber:num]];
        if ([str rangeOfString:@"."].length > 0) {
            NSString *floatStr = [str componentsSeparatedByString:@"."][1];
            if (floatStr.length == 1) {
                str = [NSString stringWithFormat:@"%@0",str];
            }else{
                str = [str substringToIndex:([str rangeOfString:@"."].location + 3)];
            }
            return [NSString stringWithFormat:@"%@",str];
        }else{
            return [NSString stringWithFormat:@"%@.00",str];
        }
    }else
        return @"0.00";
    
}


2,金额大写需要分为整数部分和小数部分来计算分别是两个函数

需要大写的汉字等可以对其进行宏定义

#define SPDiv 10000
#define SPUnit @[@"分", @"角"]
#define SPLowScale @[@"",@"拾", @"佰", @"仟"]
#define SPLargeScale @[@"",@"万",@"亿",@"兆"]
#define SPBase @[@"零", @"壹", @"贰", @"叁", @"肆", @"伍", @"陆", @"柒", @"捌", @"玖"]

+ (NSString *)stringFamatWithCapital:(NSString *)money
{
    if (money && [money doubleValue] > 0.0f) {
        NSMutableString *capital = [[NSMutableString alloc]init];
        NSString *formatString = [NSString stringWithFormat:@"%.2f",[money doubleValue]];
        NSString *par_int = [formatString substringToIndex:formatString.length - 3];
        NSString *par_dig = [formatString substringFromIndex:formatString.length - 2];
        
        BOOL isZero = ([par_int integerValue] == 0);
        capital = [self moneyInteger:par_int];
        [capital appendString:[self moneyDecimal:par_dig isZeroInt:isZero]];
        //    if ([capital isEqualToString:@"元整"]) {
        //        capital = [NSMutableString stringWithString:@"零元整"];
        //    }
        
        return capital;
    }
    else
        return @"零元整";
}

小数部分代码:

//金额小数部分转换
+ (NSString *)moneyDecimal:(NSString *)par_dig isZeroInt:(BOOL)isZero
{
    NSMutableString *dec = [[NSMutableString alloc]init];
    NSInteger dig = [par_dig integerValue];
    if (dig == 0) {
        [dec appendString:@"元整"];
    }
    else {
        if (!isZero) {
            [dec appendString:@"元"];
        }
        //0.01 is 壹分
        NSString *temp = [NSString stringWithFormat:@"%li",(long)dig];
        if (dig % 10 != 0) {
            for (NSInteger i = 0; i < temp.length; i++) {
                [dec appendString:SPBase[[[temp substringWithRange:NSMakeRange(i, 1)]integerValue]]];
                [dec appendString:SPUnit[temp.length - 1 -i]];
            }
        }
        else {
            [dec appendString:SPBase[[[temp substringWithRange:NSMakeRange(0, 1)]integerValue]]];
            [dec appendString:SPUnit[1]];
        }
        
    }
    return dec;
}

整数部分代码:

//金额整数部分转换
+ (NSMutableString *)moneyInteger:(NSString *)par_int
{
    NSMutableString *capital = [[NSMutableString alloc]init];
    NSInteger count = -1;
    NSMutableArray *items = [NSMutableArray array];
    NSInteger lenth = par_int.length;
    long long int val_int = [par_int longLongValue];
    
    while (lenth > 0) {
        NSInteger tem = val_int % SPDiv;
        [items addObject:[NSString stringWithFormat:@"%li",(long)tem]];
        val_int = val_int / SPDiv;
        lenth -= 4;
        count ++;
    }
    //    NSLog(@"%@",items);
    for (NSInteger i = count; i >= 0; i --) {
        NSString *str = items[i];
        NSInteger zeroCount = 0;
        BOOL shouldZero = count > 0 && str.length < 4 && i < count;
        for (NSInteger j = 0; j < str.length; j ++) {
            NSInteger k = [[str substringWithRange:NSMakeRange(j, 1)]integerValue];
            if (k != 0) {
                if (zeroCount != 0 || shouldZero) {
                    [capital appendString:SPBase[0]];
                    zeroCount = 0;
                    shouldZero = NO;
                }
                [capital appendString:SPBase[k]];
                [capital appendString:SPLowScale[str.length - 1 - j]];
            }
            else {
                zeroCount ++;
            }
        }
        if ([str integerValue] != 0) {
            [capital appendString:SPLargeScale[i]];
        }
    }
    return capital;
}


六,iOS中的金额格式化和金额大小写转换相关推荐

  1. python中字符串的使用04字符串大小写转换、删除空白字符

    python中字符串的使用04字符串大小写转换.删除空白字符 1.字符串的大小写转换 字符串的大小写转换就是将大写字母改为小写字母或者将小写字母改为大写字母.python中字符串大小写转换的方法有:用 ...

  2. C++ OJ 中多行数据输入(大小写转换、通过移位运算实现2的n次方、多组输入,每行输入数量不一样)

    1. 多组输入,输出每行最大值 while(cin>>a>>b) 主要解决的是两个为一组的多组数据输入,当一次只输入一个数据时就用 while(cin>>a) 输入 ...

  3. 金额格式化,保留金额后两位小数点

    ✨今天再来记录一个经常会用到的常规函数,金额格式化函数 ⌛ 金额格式化函数, ⏳ 使用场景:当需要前端展示并格式化商品价格时,用来格式化后端返回的价格数据 ⏳ 默认保留两位小数点,价格单位为分,金额符 ...

  4. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

  5. java格式化金额千位数,java金额格式化解决思路

    java金额格式化 rt. 1.在java中我想对金额进行格式化 2.两种情况 2.1 少于100 String money="10"; 经过转换之后,输入为"0.10& ...

  6. js千位符 | js 千位分隔符 | js 金额格式化

    js 千位分隔符 千位分隔符,其实就是数字中的逗号.依西方的习惯,人们在数字中加进一个符号,以免因数字位数太多而难以看出它的值.所以人们在数字中,每隔三位数加进一个逗号,也就是千位分隔符,以便更加容易 ...

  7. 金额格式化,符号位,保留两位小数

    金额格式化,符号位,保留两位小数 金额格式化,有符号位,保留两位小数.和网上大相径庭,只是发现有的-345.66格式化之后为"-,345.66",符号位没有考虑到,自己改了一下.直 ...

  8. java 金额千位用逗号隔开_金额格式化 处理千分位 金额逗号,隔开

    方法1. //处理千分位使用 var dealThousands = function(value) { if (value === 0) { return parseFloat(value).toF ...

  9. Java——有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}

    有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池用一个数组int[] arr = {10,5,20,50,100,200,500,800,2,80,300}; 创建两个抽奖箱(线程)设置线程名称分别 ...

最新文章

  1. ExtJs学习笔记(5)_Ajax示例
  2. c语言程序设计江宝钏实验六答案,《C语言程序设计》(江宝钏著)实验三答案.doc...
  3. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
  4. Java Script 第十节课 Java Script的for循环练习。
  5. 别让我思考(Don’t make me think)
  6. [Leedcode][JAVA][第236题][二叉树的公共祖先][后序遍历][BFS]
  7. Kotlin AAPT: error: resource android:attr/lStar not found.
  8. jdk下载--操作系统
  9. C++11多线程的原子操作
  10. 商务办公软件应用与实践【5】
  11. java连接Oracle乱码_如何解决Java连接数据库oracle中文乱码问题
  12. MySQL之mysqldump备份数据库
  13. 调查 问卷 设计 注意 - Web
  14. ThinkPHP3.2.3实现后台登录界面
  15. 踏歌黑名单工具类DEMO(AUB)
  16. 反锐化掩膜_带噪声抑制的反锐化掩模图像增强算法
  17. 获取必应每日壁纸(api)
  18. HTPP详解(真的很经典)
  19. STM32F40xxx 系列芯片引脚图
  20. RS485通信接口设计方案

热门文章

  1. 如何在Google表格中使用QUERY函数
  2. rpm包安装linux系统,包管理 ----- Linux操作系统rpm包安装方式步骤
  3. 大众点评美食商家电话爬虫
  4. solidity经典案例----智能小游戏
  5. 1.神奇的字符串之快速求和
  6. 不畏将来,不念过往,如此安好
  7. alertmanager 简介
  8. 【ansys】如何隐藏网格?不显示网格?在仿真结果中隐藏网格?
  9. 某知名OA命令执行方法探索(续)
  10. HDOJ 1066 题解