public class RMBCapitalization
    {
        public RMBCapitalization()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

private const string DXSZ = "零壹贰叁肆伍陆柒捌玖";
        private const string DXDW = "毫厘分角元拾佰仟萬拾佰仟亿拾佰仟萬兆拾佰仟萬亿京拾佰仟萬亿兆垓";

/// <summary>
        /// 转换整数为大写金额
        /// 最高精度为垓,保留小数点后4位,实际精度为亿兆已经足够了,理论上精度无限制,如下所示:
        /// 序号:...30.29.28.27.26.25.24  23.22.21.20.19.18  17.16.15.14.13  12.11.10.9   8 7.6.5.4  . 3.2.1.0
        /// 单位:...垓兆亿萬仟佰拾        京亿萬仟佰拾       兆萬仟佰拾      亿仟佰拾     萬仟佰拾元 . 角分厘毫
        /// 数值:...1000000               000000             00000           0000         00000      . 0000
        /// 下面列出网上搜索到的数词单位:
        /// 元、十、百、千、万、亿、兆、京、垓、秭、穰、沟、涧、正、载、极
        /// </summary>
        /// <param name="capValue">整数值</param>
        /// <returns>返回大写金额</returns>
        public string ConvertIntToUppercaseAmount(string capValue)
        {
            string currCap = "";    //当前金额
            string capResult = "";  //结果金额
            int prevChar = -1;      //上一位的值
            int currChar = 0;       //当前位的值
            int posIndex = 4;       //位置索引,从"元"开始

if (Convert.ToDouble(capValue) == 0) return "";
            for (int i = capValue.Length - 1; i >= 0; i--)
            {
                currChar = Convert.ToInt16(capValue.Substring(i, 1));
                if (posIndex > 30)
                {
                    //已超出最大精度"垓"。注:可以将30改成22,使之精确到兆亿就足够了
                    break;
                }
                else if (currChar != 0)
                {
                    //当前位为非零值,则直接转换成大写金额
                    currCap = DXSZ.Substring(currChar, 1) + DXDW.Substring(posIndex, 1);
                }
                else
                {
                    //防止转换后出现多余的零,例如:3000020
                    switch (posIndex)
                    {
                        case 4: currCap = "元"; break;
                        case 8: currCap = "萬"; break;
                        case 12: currCap = "亿"; break;
                        case 17: currCap = "兆"; break;
                        case 23: currCap = "京"; break;
                        case 30: currCap = "垓"; break;
                        default: break;
                    }
                    if (prevChar != 0)
                    {
                        if (currCap != "")
                        {
                            if (currCap != "元") currCap += "零";
                        }
                        else
                        {
                            currCap = "零";
                        }
                    }
                }
                capResult = currCap + capResult;
                prevChar = currChar;
                posIndex += 1;
                currCap = "";
            }
            return capResult;
        }

/// <summary>
        /// 转换小数为大写金额
        /// </summary>
        /// <param name="capValue">小数值</param>
        /// <param name="addZero">是否增加零位</param>
        /// <returns>返回大写金额</returns>
        public string ConvertDecToUppercaseAmount(string capValue, bool addZero)
        {
            string currCap = "";
            string capResult = "";
            int prevChar = addZero ? -1 : 0;
            int currChar = 0;
            int posIndex = 3;

if (Convert.ToInt16(capValue) == 0) return "";
            for (int i = 0; i < capValue.Length; i++)
            {
                currChar = Convert.ToInt16(capValue.Substring(i, 1));
                if (currChar != 0)
                {
                    currCap = DXSZ.Substring(currChar, 1) + DXDW.Substring(posIndex, 1);
                }
                else
                {
                    if (Convert.ToInt16(capValue.Substring(i)) == 0)
                    {
                        break;
                    }
                    else if (prevChar != 0)
                    {
                        currCap = "零";
                    }
                }
                capResult += currCap;
                prevChar = currChar;
                posIndex -= 1;
                currCap = "";
            }
            return capResult;
        }

/// <summary>
        /// 人民币大写金额
        /// </summary>
        /// <param name="value">人民币数字金额值</param>
        /// <returns>返回人民币大写金额</returns>
        public string RMBAmount(double value)
        {
            string capResult = "";
            string capValue = string.Format("{0:f4}", value);       //格式化
            int dotPos = capValue.IndexOf(".");                     //小数点位置
            bool addInt = (dotPos == 0);                            //是否在结果中加"整"
            bool addMinus = (capValue.Substring(0, 1) == "-");      //是否在结果中加"负"
            int beginPos = addMinus ? 1 : 0;                        //开始位置
            string capInt = capValue.Substring(beginPos, dotPos);   //整数
            string capDec = capValue.Substring(dotPos + 1);         //小数

if (dotPos > 0)
            {
                capResult = ConvertIntToUppercaseAmount(capInt) + ConvertDecToUppercaseAmount(capDec, Convert.ToDouble(capInt) != 0 ? true : false);
            }
            else
            {
                capResult = ConvertIntToUppercaseAmount(capDec);
            }
            if (addMinus) capResult = "负" + capResult;
            if (addInt) capResult += "整";
            return capResult;
        }

}

大小写转换(金额转换)相关推荐

  1. 【JAVA工具类】金额与汉字大小写的转换 金额转换

    主要实现金额与汉字大小写的转换 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一 千零一拾一元整)输出. 去零的代码: /************************ ...

  2. 应用Excel实现大小写金额转换

    在基本建设审计中,经常需要同时写明审定工程造价的大小写金额,如2942635.44元写为"贰佰玖拾肆万贰仟陆佰叁拾伍元肆角肆分",388372.80元写为"叁拾捌万捌仟叁 ...

  3. 人民币大小写金额转换

    1.调用    ConvertIntToUppercaseAmount(String value)  即可 <summary>    ///人民币大小写金额转换    ///</su ...

  4. C#人民币大小写金额转换(C#版本)

    1.调用    ConvertIntToUppercaseAmount(String value)  即可 <summary>     /// 人民币大小写金额转换     /// < ...

  5. Java实现窗口框架,转换金额的大小写

    首先一个MoneyFrame类 package L5frame;import java.awt.*; import java.awt.event.*;import javax.swing.*;publ ...

  6. python数字大小写转换代码_用python实现把数字人民币金额转换成大写的脚本程序...

    # -*- coding: utf-8 -*- def Num2MoneyFormat( change_number ): """ .转换数字为大写货币格式( forma ...

  7. 阿拉伯数字小写金额转换成中文大写金C额程序说明

    阿拉伯数字小写金额转换成中文大写金额C程序说明 1.问题的提出 寒假帮同学交缴话费时,不经意间看到收据上同时有小写金额和大写金额,想想各种各样的票据诸如缴费收据.银行业务回单.商场销售凭证.专用发票等 ...

  8. javascript转换金额格式

    //转换金额格式 10,000.00//money=金额//n=保留小数位数 默认2位 function parseMoney(money, n) {if (money == 'undefined' ...

  9. 杂记(1)java读取char类型2. 大小写字母的转换3. 字符串的拼接4. 一串数字排序

    1. java读取char类型 应为java中没有nextchar();函数,所以只能先读取一行,即 Sting a=sc.nextline(); char need=a.charAt(0);//取字 ...

  10. c#金额转换成中文大写金额

    c#金额转换成中文大写金额 原文:c#金额转换成中文大写金额 2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary>/// 金额转换成中文大写金额/// &l ...

最新文章

  1. sangerbox平台使用(四)气泡图的绘制
  2. 在html游戏里添加计时,如何在计时器上运行后台任务 (HTML)
  3. 大工18秋计算机文化基础在线测试2,大工18秋《计算机文化基础》在线测试2【答案】...
  4. 给 Android 研发的一些的建议
  5. [机器学习]关联挖掘算法Apriori和FP-Growth以及基于Spark 实例
  6. ZZFAFA_BilibiliMusic_DownUrl
  7. 2019 支付宝App支付 --- PHP
  8. Google Code Review 处理代码审查中的推回
  9. 卫星图像数据下载地址
  10. 【信号处理】单通道盲源分离(SSA-ICA)算法
  11. soul软件的简单分析
  12. iOS中WKWebView清除cookies
  13. JMeter 如何生成指定取值范围、指定小数位数的随机浮点数
  14. 天啦噜,小白后台的一波新功能,看完世界杯 看这里!(最后有福利 哦~~)
  15. 计算机内存加速,电脑内存使用率过高怎么加速
  16. 这篇文章来告诉你几个实用的视频转文字的方法
  17. 小杜滑铲 DFS 最长路径
  18. 使用ADB 查看模拟器得日志,unity得日志 以及保存
  19. 问题解决:java.sql.SQLException: No suitable driver found for jdbc:mysql
  20. 纯真ip数据库 转mysql_如何把纯真ip数据库导入到MySQL数据表中

热门文章

  1. 深度学习论文: Learning to Resize Images for Computer Vision Tasks及其PyTorch实现
  2. java文档翻译,将word文件翻译该怎么操作?
  3. win10下标注工具sloth的安装及使用
  4. VScode提交Git代码总是要输入账号和密码?
  5. 常用的基础英文字体推荐
  6. Redis基础篇(一)
  7. 可转债数据一览表集思录_可转债交易常用的一些工具与手法 支独秀 股票大作手回忆录 自己常看的可转债数据网站: 集思录:网页链接 富投网:网页链接 可转债新债申购还不是闭着眼睛申... - 雪球...
  8. 在Linux下使用金山词霸2003(转)
  9. CDN最通俗易懂的CDN解释
  10. 计算机桌面音量键在哪,电脑音量调节快捷键_电脑音量快捷键设置