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

前几天有人在群里写这个,好像挺纠结的样子,就顺手帮他写了一个。

主要思路是中文的数字读法是四位四位分的,高位数字的读法就是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));
}

string full_toword(long i){
long[] a=new long[4];//按照万亿兆拆分输入数字
a [0] = i/1000000000000;
a [1] = i / 100000000 % 10000;
a [2] = i / 10000 % 10000;
a [3] = i % 10000;
string[] s = new string[4];//每4位数字对应的字符串
s [0] = thousand_toword ((int)a [0],"兆");
s [1] = thousand_toword ((int)a [1],"亿");
s [2] = thousand_toword ((int)a [2],"万");
s [3] = thousand_toword ((int)a [3],"");
for (int j = 0; j < 4; j++) {
if (0 == a [j])
s [j] = "";//除去高位零
else
break;
}
for (int j = 3; j >= 0; j--) {
if (0 == a [j])
s [j] = "";//除去低位零
else
break;
}
int max;//获取数字中最大的单位
for (max = 0; max < 4; max++) {
if (a [max] != 0)
break;
}
for (int j = max + 1; j < 4; j++) {
if ((0 != a [j]) && (a [j] / 1000 == 0))
s [j] = "零" + s [j];//如果该四位数字不是零,并且不是最高位,那么在前面加一个零
}
string _out = s[0]+s[1]+s[2]+s[3];
return _out;
}

///输出四位数字的读法
string thousand_toword(int i,string ss){
int[] a=new int[4];
a [0] = i / 1000;
a [1] = i / 100 % 10;
a [2] = i / 10 % 10;
a [3] = i % 10;
string[] s = new string[4];
s [0] = toword (a [0],"千");
s [1] = toword (a [1],"百");
s [2] = toword (a [2],"十");
s [3] = toword (a [3],"");
for (int j = 0; j < 4; j++) {
if (0 == a [j])
s [j] = "";//除去高位零
else
break;
}
for (int j = 3; j >= 0; j--) {
if (0 == a [j])
s [j] = "";//除去低位零
else
break;
}
for (int j = 0; j < 3; j++) {
if (("零" == s [j]) && ("零" == s [j+1]))
s [j] = "";//将连续的零合并为一个,比如1001这样的数字
}
string _out = s[0]+s[1]+s[2]+s[3]+ss;
return _out;
}

//将对应的一位阿拉伯数字转换为汉字
string toword(int i,string s){
switch (i) {
case 0:
return("零");
case 1:
return("一"+s);
case 2:
return("二"+s);
case 3:
return("三"+s);
case 4:
return("四"+s);
case 5:
return("五"+s);
case 6:
return("六"+s);
case 7:
return("七"+s);
case 8:
return("八"+s);
case 9:
return("九"+s);
default:
return("");

}
}
}

附一张输出结果,没问题

时间: 2024-10-23 08:56:06

将阿拉伯数字转换为中文书面数字的相关文章

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

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

.Net C# 阿拉伯数字转为中文金额数字

一个练习,将阿拉伯数字转为中文金额数字 代码: public string ReturnStr(string inputNum) { string[] intArr = { "0" ,"1", "2", "3", "4", "5", "6", "7", "8", "9", }; string[] strArr

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

最近的做项目中需要弄一个金额是阿拉伯数字转为中文大写的金额,自己偷懒了,就总结一下. 第一种方法相对复杂 private static readonly String cnNumber = "零壹贰叁肆伍陆柒捌玖"; private static readonly String cnUnit = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟"; 1 public static String GetCnString(String MoneyString) //传入数字 2

日期转换为中文大写数字

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

把阿拉伯数字转换为中文读法

private static Dictionary<string, string> digits = null; static General() { digits = new Dictionary<string, string>(); digits.Add(".","点"); digits.Add("0", "零"); digits.Add("1", "一");

数字货币转换为中文货币

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

阿拉伯数字与中文数字的转换----------相互转化

今天继续看<算法的乐趣>,学习了阿拉伯数字与中文数字的转化. 汉字用零一二三四五六七八九作为基本计数,与阿拉伯数字靠数字偏移位置的权位不一样.中文数字是才有"数字+权位"的方式组成数字,比方百,千,万. 中文数字每一个数字后都会跟上一个权位.权位就是数字的量值,相当于阿拉伯数字的数位. 中文计数以万为小节,万下面没有节权,万之上是亿为节权. 中文另一个特点是多变的"零",大概总结为三个规则: 1.以10000为小节.小节的结尾即使是0,也不使用"

阿拉伯数字转中文数字

package algorithm.other; /** * 阿拉伯数字转中文数字 * @author NINGUANG * */public class ChineseNum{ private static String[] chnNumChar = { "零", "一", "二", "三", "四", "五", "六", "七", "

JS将数字转换为中文

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS将数字转换为中文</title> </head> <body> <script> // 定义转换函数 function transform(tranvalue){ try{ var i=1; var dw2 = new Array("",