• 小写金额转换为大写金额


    前言

    在很多地方都有用到将小写金额转换为大写金额,就是将类似1234.56转换为壹仟贰佰叁拾肆圆伍角陆分。

    到底要怎样实现呢?其实只要仔细注意自己到底是怎么读的,细细揣摩一下。1 在千位:壹仟、2 在百位:贰佰......

    所以有两个过程:

    1.讲阿拉伯数字转换为大写数字。

    2.在各位后面加上诸如:万、仟、佰、拾、圆、分、角。这里需要注意,比如壹仟圆,百位、十位及个位都是 0,总不能说壹仟零佰零拾零圆吧?

      还有,比如多少万多少圆,这里圆、万、亿、兆,这几个的不能丢的。

    正文

    /// <summary>
    /// 小写金额转换为大写金额
    /// </summary>
    /// <param name="figures">小写金额</param>
    /// <returns>大写金额</returns>
    public string Figures2Words(decimal figures)
    {
    StringBuilder words
    = new StringBuilder();
    string cnNumber = "零壹贰叁肆伍陆柒捌玖";//大写
    string cnUnit = "分角圆拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";//单位
    string temp = Math.Round(figures + (decimal)0.001, 2).ToString().Replace(".", string.Empty);//精确到 2 位小数,并去掉 . 号
    try
    {
    int length = temp.Length - 1;
    if (length > 0 && length < 18)//处理仟兆以内
    {
    int j = 0;
    int n = 0;
    for (int i = 0; i <= length; i++)
    {
    j
    = (int)temp[i] - 48;// 当前位转换为索引。0 在 ASCII中对应48,1 为 49,依次类推
    n = i + 1 >= length ? (int)temp[length] - 48 : (int)temp[i + 1] - 48;//高一位转换为索引
    if (j == 0)//当前位数字为 0
    {
    if (length - i == 2 || length - i == 6 || length - i == 10 || length - i == 14)//对应圆、万、亿、兆,(length - i - 2) % 4 == 0
    {
    words.Append(cnUnit[length
    - i]);
    }
    else
    {
    if (n != 0)
    {
    words.Append(cnNumber[j]);
    }
    }
    }
    else//当前位数字不为 0
    {
    words.Append(cnNumber[j]);
    //数字转换为大写
    words.Append(cnUnit[length - i]);//其后加上货币单位
    }
    }
    //words.Append("整");
    }
    else
    {
    words.Append(
    "溢出");
    }
    }
    catch
    {
    return string.Empty;
    }
    return words.ToString();
    }
  • 相关阅读:
    获取指定<文字行数>的<高度>是多少 TextKit
    JS 与 OC 交互
    PHP-note
    MySQL函数
    freeSWITCH之多平台测试通信
    freeSWITCH之安装
    PHP面向对象
    MySQL Optimization 优化原理
    理解常量指针与指针常量?
    InterView之PHP(2)
  • 原文地址:https://www.cnblogs.com/ainijiutian/p/1733717.html
Copyright © 2020-2023  润新知