将天文数字转换成中文大写

思路非常简单,且没有任何位数限制! 
例如: 401,0103,1013 
读作: 肆佰零壹[亿]零壹佰零叁[万]壹仟零壹拾叁 
咱们先按每四位一组 从左到右,高位到低位分别"大声朗读"一下: 
"肆佰零壹" 单位是: "[亿]" 
"壹佰零叁" 单位是: "[万]" 
"壹仟零壹拾叁" 单位是 "" (相当于没有单位) 
很容易发现,每四位: 只有 千位,百位,十位,个位 这四种情况! 
我们把 [万],[亿] 当作单位就可以了! 
这就是规律了!简单吧! 
依据该思路,只用区区不到 50 行代码就可以搞定: 
只要你能够提供足够多的"单位" 

任何天文数字都可以正确转换! 

C# Code

namespace App
{
    using System; 

    public class Util
    {
        public static string ConvertNumberToChinese(string x, string[] Nums, string[] Digits, string[] Units)
        {
            string S = ""; //返回值
            int p = 0; //字符位置指针
            int m = x.Length % 4; //取模
            // 四位一组得到组数
            int k = (m > 0 ? x.Length / 4 + 1 : x.Length / 4);
            // 外层循环在所有组中循环
            // 从左到右 高位到低位 四位一组 逐组处理
            // 每组最后加上一个单位: "[万亿]","[亿]","[万]"
            for (int i = k; i > 0; i--)
            {
                int L = 4;
                if (i == k && m != 0)
                {
                    L = m;
                }
                // 得到一组四位数 最高位组有可能不足四位
                string s = x.Substring(p, L);
                int l = s.Length;
                // 内层循环在该组中的每一位数上循环 从左到右 高位到低位
                for (int j = 0; j < l; j++)
                {
                    //处理改组中的每一位数加上所在位: "仟","佰","拾",""(个)
                    int n = Convert.ToInt32(s.Substring(j, 1));
                    if (n == 0)
                    {
                        if (j < l - 1
                            && Convert.ToInt32(s.Substring(j + 1, 1)) > 0 //后一位(右低)
                            && !S.EndsWith(Nums[n]))
                        {
                            S += Nums[n];
                        }
                    }
                    else
                    {
                        //处理 1013 一千零"十三", 1113 一千一百"一十三"
                        if (!(n == 1 && (S.EndsWith(Nums[0]) | S.Length == 0) && j == l - 2))
                        {
                            S += Nums[n];
                        }
                        S += Digits[l - j - 1];
                    }
                }
                p += L;
                // 每组最后加上一个单位: [万],[亿] 等
                if (i < k) //不是最高位的一组
                {
                    if (Convert.ToInt32(s) != 0)
                    {
                        //如果所有 4 位不全是 0 则加上单位 [万],[亿] 等
                        S += Units[i - 1];
                    }
                }
                else
                {
                    //处理最高位的一组,最后必须加上单位
                    S += Units[i - 1];
                }
            }
            return S;
        } 

        // 测试程序
        private static void Main()
        {
            //数字 数组
            string[] Nums = new string[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
            //位 数组
            string[] Digits = new string[] {"", "拾", "佰", "仟"};
            //单位 数组
            string[] Units = new string[] {"", "[万]", "[亿]", "[万亿]"};
            Console.WriteLine(ConvertNumberToChinese("1100000013", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("2100000000", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("1000000000", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("40000000013", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("40000000001", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("400000010000", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("40101031013", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("40101031113", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("101140101031013", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("100000001000013", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("100000001000113", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("100011003", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("10010103", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("10110013", Nums, Digits, Units));
            Console.WriteLine(ConvertNumberToChinese("130000", Nums, Digits, Units));
            Console.ReadLine();
        }
    }
}

T-SQL:

时间: 2024-10-26 10:32:44

将天文数字转换成中文大写的相关文章

Excel中数字如何自动转换成中文大写数字

平时工作中输入金额时常常需要转成中文大写数字,但输入起来比较麻烦,那么是否可以将数字直接转换成中文大写呢?本教程中就为大家介绍在excel中如何将数字自动转换成中文大写数字. 第一步:打开Excel工作表,鼠标右键单击选中需要显示中文大写数字的单元格(可以批量拉选单元格),在弹出的快捷菜单中选择"设置单元格格式". 第二步:在弹出的对话框中选择"数字"选项卡,并且在"分类"列表中选择"特殊",在类型框中选择"中文大写

javascript-JavaScript 时间数字如何转换成中文大写

问题描述 JavaScript 时间数字如何转换成中文大写 例如, 把2012年12月31日转换成二〇一二年十二月三十一日.在线等! 急急急!!!!! 解决方案 function numToCN(s) { var sCN = '〇一二三四五六七八九'; function getCN(s) { var c = s.charAt(0) cCN = sCN.charAt(c); return s.length == 1 ? cCN : (c == '1' ? '' : cCN) + '十' + sCN

求代码 代码-求用C++写任意整数转换成中文大写的代码

问题描述 求用C++写任意整数转换成中文大写的代码 我正在学习C++,才开始不懂怎么写,还没有理清头绪,希望有人能帮我写一下,我好有一个指路灯,谢谢 解决方案 CString ChineseCapitalMoney(double Num) { CString szChMoney,szNum; int iLen, iNum, iAddZero=0; TCHAR* hzUnit[18]={_T("分"),_T("角"),_T("元"),_T(&quo

一个将阿拉伯数字转换成中文大写的最简单算法

大写|算法|中文|转换 代码如下: //加到类的定义部分private static string[] cstr={"零","壹","贰","叁","肆", "伍", "陆","柒","捌","玖"};private static string[] wstr={"",""

一个将阿拉伯数字转换成中文大写的好算法

大写|算法|中文|转换 //加到类的定义部分private static string[] cstr={"零","壹","贰","叁","肆", "伍", "陆","柒","捌","玖"};private static string[] wstr={"","",&quo

excel中将阿拉伯数字转换成中文大写数字的函数方式

  在a1单元格输入一个数值 鼠标左键点一下b1单元格,然后输入=numberstring(),然后将鼠标左键点击一下括号内部 鼠标左键点击一下a1单元格 然后输入一个半角逗号,一个1,然后点击绿色的对号 函数的返回值变成了一个很大的用一二三形式显示的中文数字 鼠标点击函数第二个参数1前面的位置,然后向后拖动选中1,此时1的背景是黑色,最后键盘输入2 输入一个2之后然后点击绿色的对号完成输入 此时函数的返回值是大写的很大的一个数字 如果第三个参数是3,函数将返回数码而不是一个很大的数字,数码是大

C#实现的【阿拉伯数字转换成中文大写金额】代码

大写|金额|中文|转换 以下C#代码实现了将阿拉伯数字转换成中文大写金额的功能,并Visual Studio.NET 2003 下调试基本通过(未经严格测试,希望各位发现错误后与作者联系fanz2000@sohu.com,或直接在csdn上回帖告知). 代码的主调函数为ConvertSum,它的参数是string类型的数字字符串.在ASP.NET中调用方式如下:Label1.Text=ConvertSum("数字字符串"); 其代码如下: //作者:fanz2000 //Email:f

Python实现把数字转换成中文

  这篇文章主要介绍了Python实现把数字转换成中文,一般用于数字金额转中文大写金额,即将阿拉伯数字转换为大写的中文,需要的朋友可以参考下 周末在家,写了个小程序,用于将阿拉伯数字转换化大写中文.程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

JavaScript实现把数字转换成中文

  这篇文章主要介绍了JavaScript实现把数字转换成中文,本文直接给出实例代码,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68