金额阿拉伯数字转换为中文大写

最近的做项目中需要弄一个金额是阿拉伯数字转为中文大写的金额,自己偷懒了,就总结一下。

第一种方法相对复杂

private static readonly String cnNumber = "零壹贰叁肆伍陆柒捌玖";
private static readonly String cnUnit = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";

 1   public static String GetCnString(String MoneyString) //传入数字
 2         {
 3             String[] tmpString = MoneyString.Split(‘.‘);
 4             String intString = MoneyString;   // 默认为整数
 5             String decString = "";            // 保存小数部分字串
 6             String rmbCapital = "";            // 保存中文大写字串
 7             int k;
 8             int j;
 9             int n;
10
11             if (tmpString.Length > 1)
12             {
13                 intString = tmpString[0];             // 取整数部分
14                 decString = tmpString[1];             // 取小数部分
15             }
16             decString += "00";
17             decString = decString.Substring(0, 2);   // 保留两位小数位
18             intString += decString;
19
20             try
21             {
22                 k = intString.Length - 1;
23                 if (k > 0 && k < 18)
24                 {
25                     for (int i = 0; i <= k; i++)
26                     {
27                         j = (int)intString[i] - 48;
28                         // rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];     // 供调试用的直接转换
29                         n = i + 1 >= k ? (int)intString[k] - 48 : (int)intString[i + 1] - 48; // 等效于 if( ){ }else{ }
30                         if (j == 0)
31                         {
32                             if (k - i == 2 || k - i == 6 || k - i == 10 || k - i == 14)
33                             {
34                                 rmbCapital += cnUnit[k - i];
35                             }
36                             else
37                             {
38                                 if (n != 0)
39                                 {
40                                     rmbCapital += cnNumber[j];
41                                 }
42                             }
43                         }
44                         else
45                         {
46                             rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k - i];
47                         }
48                     }
49
50                     rmbCapital = rmbCapital.Replace("兆亿万", "兆");
51                     rmbCapital = rmbCapital.Replace("兆亿", "兆");
52                     rmbCapital = rmbCapital.Replace("亿万", "亿");
53                     rmbCapital = rmbCapital.TrimStart(‘元‘);
54                     rmbCapital = rmbCapital.TrimStart(‘零‘);
55
56                     return rmbCapital;
57                 }
58                 else
59                 {
60                     return "";   // 超出转换范围时,返回零长字串
61                 }
62             }
63             catch
64             {
65                 return "";   // 含有非数值字符时,返回零长字串
66             }
67         }
68  

这里使用另一种方法,使用正则表达式,去匹配数字,这个看着比较简单,可以试试

 1        public string DaXie(string money)
 2         {
 3             try
 4             {
 5                 string s = double.Parse(money).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
 6                 string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?‘z‘0)[0A-E]*((?=[1-9])|(?‘-z‘(?=[F-L\.]|$))))|((?‘b‘[F-L])(?‘z‘0)[0A-L]*((?=[1-9])|(?‘-z‘(?=[\.]|$))))", "${b}${z}");
 7                 return Regex.Replace(d, ".", delegate(Match m) { return "负圆空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万億兆京垓秭穰"[m.Value[0] - ‘-‘].ToString(); });
 8             }
 9             catch (Exception ex)
10             {
11                 ClassAppLogs.WriteLogToLocalTextstatic(ex);
12                 return "零";
13             }
14         }

正则表达式匹配

以下是去查到的,觉得不错,还是有点复杂

http://www.cnblogs.com/jsping/archive/2012/07/25/2607772.html

http://blog.csdn.net/lwjnumber/article/details/7037083

时间: 2024-08-10 21:29:04

金额阿拉伯数字转换为中文大写的相关文章

金额小写转中文大写类

using System; using System.Collections.Generic; using System.Text; namespace Class_ZhH { /// <summary> /// 金额小写转中文大写类(附带一个数字转大写). /// 整数支持到万亿:小数部分支持到分(超过两位将进行Banker舍入法处理) /// </summary> public class NumGetString { private static String[] Ls_Sh

日期转换为中文大写数字

动手写一个转换日期的小方法,虽然很短,但是需要考虑的东西还是挺多的,记录一下. /// <summary> /// 将日期转换为中文大写 /// 如:一九八三 十一 二十七 /// </summary> public class ChineseNumberHelper { static Dictionary<int, string> _theNumOfChineseCapital = new Dictionary<int, string>() { {0,&q

【iOS开发系列】将阿拉伯数字转换为中文数字

/** * 将阿拉伯数字转换为中文数字 */ +(NSString *)translationArabicNum:(NSInteger)arabicNum { NSString *arabicNumStr = [NSString stringWithFormat:@"%ld",(long)arabicNum]; NSArray *arabicNumeralsArray = @[@"1",@"2",@"3",@"4&q

SSRS 实现数字金额转换为中文大写汉字

比如: 金额=49,701,120.00,将其转换为"肆仟玖佰柒拾万壹仟壹佰贰拾元整":金额 289,546.52 ,转换为 "贰拾捌万玖仟伍佰肆拾陆元伍角贰分". 解决方法:添加VB的转换函数写在CODE里,然后在表达式里调用自定义函数转换. 如:增加两个占位符表达式,如小数位为0时表达式2添加"整", 表达式1=Code.GetCnString(Fields!Amount.Value) 表达式2=IIF(Fields!Amount.Value

将阿拉伯数字转换为中文书面数字

前几天有人在群里写这个,好像挺纠结的样子,就顺手帮他写了一个. 主要思路是中文的数字读法是四位四位分的,高位数字的读法就是xxxx亿xxxx万xxxx. void Start () { //测试数据 Debug.Log (full_toword(987654321)); Debug.Log (full_toword(907654321)); Debug.Log (full_toword(9000900654321)); Debug.Log (full_toword(9000900000000))

银行货币单位阿拉伯数字转化中文大写 eclipse 下C 与java实现 MOOC

先来个简单的:MOOC上面看到的 输入一个整数,输出每个数字对应的拼音.当整数为负数时,先输出"fu"字.十个数字对应的拼音如下:  0: ling  1: yi  2: er  3: san  4: si  5: wu  6: liu  7: qi  8: ba  9: jiu 输入格式: 输入在一行中给出一个整数,如: 1234 . 提示:整数包括负数.零和正数. 输出格式: 在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格.如 yi er san

阿拉伯数字转中文大写(整数)

<template> <div> <!--使用elementUI输入框插件--> <!--阿拉伯值输入框--> <el-input-number v-model="a" controls-position="right" :min="0"></el-input-number> <!--输入框中转中文--> <el-input v-model.trim=&qu

js阿拉伯数字转中文大写 方法重多

方法一  function DX(n) { if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "数据非法"; var unit = "千百拾亿千百拾万千百拾元角分", str = ""; n += "00"; var p = n.indexOf('.'); if (p >= 0) n = n.substring(0, p) + n.substr(p+1, 2); unit = u

js阿拉伯数字转中文大写

function DX(n) { if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "数据非法"; var unit = "千百拾亿千百拾万千百拾元角分", str = ""; n += "00"; var p = n.indexOf('.'); if (p >= 0) n = n.substring(0, p) + n.substr(p+1, 2); unit = unit.s