Posted on 2009-04-22 23:18
火山工作室 阅读(159)
评论(0) 编辑 收藏 引用 网摘 所属分类:
高职IT教育
1
using System;
2
class Class1
3
{
4
static void Main(string[] args)
5
{
6
Console.WriteLine(changeToBig(345.56));
7
}
8
public static String changeToBig(double value)
9
{
10
char[] hunit=
{'拾','佰','仟'}; //段内位置表示
11
char[] vunit=
{'万','亿'}; //段名表示
12
char[] digit=
{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'}; //数字表示
13
long midVal = (long)(value*100); //转化成整形
14
String valStr=midVal.ToString(); //转化成字符串
15
String head=valStr.Substring(0,valStr.Length-2); //取整数部分
16
String rail=valStr.Substring(valStr.Length-2); //取小数部分
17
18
String prefix=""; //整数部分转化的结果
19
String suffix=""; //小数部分转化的结果
20
//处理小数点后面的数
21
if(rail.Equals("00"))
22
{ //如果小数部分为0
23
suffix="整";
24
}
25
else
26
{
27
suffix=digit[rail[0]-'0']+"角"+digit[rail[1]-'0']+"分"; //否则把角分转化出来
28
}
29
//处理小数点前面的数
30
char[] chDig=head.ToCharArray(); //把整数部分转化成字符数组
31
char zero='0'; //标志'0'表示出现过0
32
byte zeroSerNum = 0; //连续出现0的次数
33
for(int i=0;i<chDig.Length;i++)
34
{ //循环处理每个数字
35
int idx=(chDig.Length-i-1)%4; //取段内位置
36
int vidx=(chDig.Length-i-1)/4; //取段位置
37
if(chDig[i]=='0')
38
{ //如果当前字符是0
39
zeroSerNum++; //连续0次数递增
40
if(zero == '0')
41
{ //标志
42
zero=digit[0];
43
}
44
else if(idx==0 && vidx >0 &&zeroSerNum < 4)
45
{
46
prefix += vunit[vidx-1];
47
zero='0';
48
}
49
continue;
50
}
51
zeroSerNum = 0; //连续0次数清零
52
if(zero != '0')
53
{ //如果标志不为0,则加上,例如万,亿什么的
54
prefix+=zero;
55
zero='0';
56
}
57
prefix+=digit[chDig[i]-'0']; //转化该数字表示
58
if(idx > 0) prefix += hunit[idx-1];
59
if(idx==0 && vidx>0)
60
{
61
prefix+=vunit[vidx-1]; //段结束位置应该加上段名如万,亿
62
}
63
}
64
65
if(prefix.Length > 0) prefix += '圆'; //如果整数部分存在,则有圆的字样
66
return prefix+suffix; //返回正确表示
67
}
68
}
69
70