如将 1024.67 转换为 壹仟零贰拾肆圆陆角柒分
我写一个程序需要用到.
谢谢!
我写一个程序需要用到.
谢谢!
解决方案 »
- c# Winform用户控件如何在别的项目中使用
- 添加人员然后显示相关人员属性,SetFoucus第一次有效第二次却不行
- 废弃的代码要保留在项目中吗?
- picturebox中的坐标轴问题
- reporting services 中如何对数据进行分页合计?
- 请问哪有vss的下载地址的啊,急求,谢谢 !
- 请问怎样把一个类编译成.dll文件啊??
- access的mdb数据库文件模糊查询的怪异现象,谁知道怎么解决
- 请问:大家做的remoting服务端的内存使用状况
- 请教C++ 非托管DLL 调用的问题
- 请问win xp+sp2中自己设置的还原点的文件被系统放在那里了呀?
- 能否程序控制IIS回收(我知道可以自动回收,但需要用程序控制)。
namespace Skyiv.Util
{
using System.Text; class Test
{
static void Main()
{
for (;;)
{
System.Console.Write("金额: ");
string s = System.Console.ReadLine();
decimal m;
try { m = decimal.Parse(s); }
catch { break; }
System.Console.WriteLine("大写: " + new Money(m));
}
}
} // 该类重载的 ToString() 方法返回的是大写金额字符串
class Money
{
public string Yuan = "元"; // “元”,可以改为“圆”、“卢布”之类
public string Jiao = "角"; // “角”,可以改为“拾”
public string Fen = "分"; // “分”,可以改为“美分”之类
static string Digit = "零壹贰叁肆伍陆柒捌玖"; // 大写数字
bool isAllZero = true; // 片段内是否全零
bool isPreZero = true; // 低一位数字是否是零
bool Overflow = false; // 溢出标志
long money100; // 金额*100,即以“分”为单位的金额
long value; // money100的绝对值
StringBuilder sb = new StringBuilder(); // 大写金额字符串,逆序 // 只读属性: "零元"
public string ZeroString
{
get { return Digit[0] + Yuan; }
} // 构造函数
public Money(decimal money)
{
try { money100 = (long)(money * 100m); }
catch { Overflow = true; }
if (money100 == long.MinValue) Overflow = true;
} // 重载 ToString() 方法,返回大写金额字符串
public override string ToString()
{
if (Overflow) return "金额超出范围";
if (money100 == 0) return ZeroString;
string [] Unit = { Yuan, "万", "亿", "万", "亿亿" };
value = System.Math.Abs(money100);
ParseSection(true);
for (int i = 0; i < Unit.Length && value > 0; i++)
{
if (isPreZero && !isAllZero) sb.Append(Digit[0]);
if (i == 4 && sb.ToString().EndsWith(Unit[2]))
sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);
sb.Append(Unit[i]);
ParseSection(false);
if ((i % 2) == 1 && isAllZero)
sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);
}
if (money100 < 0) sb.Append("负");
return Reverse();
} // 解析“片段”: “角分(2位)”或“万以内的一段(4位)”
void ParseSection(bool isJiaoFen)
{
string [] Unit = isJiaoFen ?
new string [] { Fen, Jiao } :
new string [] { "", "拾", "佰", "仟" };
isAllZero = true;
for (int i = 0; i < Unit.Length && value > 0; i++)
{
int d = (int)(value % 10);
if (d != 0)
{
if (isPreZero && !isAllZero) sb.Append(Digit[0]);
sb.AppendFormat("{0}{1}", Unit[i], Digit[d]);
isAllZero = false;
}
isPreZero = (d == 0);
value /= 10;
}
} // 反转字符串
string Reverse()
{
StringBuilder sbReversed = new StringBuilder();
for (int i = sb.Length - 1; i >= 0; i--)
sbReversed.Append(sb[i]);
return sbReversed.ToString();
}
}
}
{
Application.Run(new Form1());
} private void Form1_Load(object sender, System.EventArgs e)
{
this.textBox1.Text="12,789,24.01";
this.textBox2.Text="";
} private void button1_Click(object sender, System.EventArgs e)
{
string s=this.textBox1.Text.Trim();
s=s.Replace(",","");
//有无 " ."
if(s.IndexOf(".")==-1)
{
s=s+".00";
}
string []a=s.Split('.');
//存放结果
char []m=a[0].ToCharArray();
char []n=a[1].ToCharArray(); string box=dowork(m,n);
this.textBox2.Text=box+"整";
}
private string dowork(char [] s1,char []s2) { string [] R1=new string[]{"仟","佰","拾","元"};//长度为4
string [] R2=new string[]{"角","分"};//长度为2
//处理整数部分
int len=s1.Length;
int len2=s2.Length; string box="";
string box1="";
string box2="";
string box3="";
char []a=null;
char []b=null;
char []c=null; //是否过亿
if(len>=9)
{
a=new char[len-8];
b=new char[4];
c=new char[4];
Array.Copy(s1,0,a,0,len-8);
Array.Copy(s1,len-8,b,0,4);
Array.Copy(s1,len-4,c,0,4);
a=rep(a,len-8);
b=rep(b,4);
c=rep(c,4); } //是否过万
if(len>=5 &&len<=8)
{
b=new char[len-4];
c=new char[4];
Array.Copy(s1,0,b,0,len-4);
Array.Copy(s1,len-4,c,0,4);
b=rep(b,len-4);
c=rep(c,4);
}
//在万以内
if(len<=4)
{
c=new char[len];
Array.Copy(s1,0,c,0,len);
c=rep(c,len);
}
if(c!=null && c.Length>0)
{
//加单位
int j=3;
for(int i=c.Length-1;i>=0;i--) {
if(c.Length==1&&c[c.Length-1]=='零')
{
break;
} if(c[i]!='零')
{
box1=c[i].ToString()+R1[j]+box1;
}
else
{
box1=R1[j]+box1;
}
j--;
}
}
if(b!=null &&b.Length>0)
{
//加单位
int j=3;
for(int i=b.Length-1;i>=0;i--) {
if(b[i]!='零')
{
if(i==b.Length-1)
{
box2=b[i].ToString()+box2;
}
else
{
box2=b[i].ToString()+R1[j]+box2;
}
}
j--;
}
box2=box2+"万"; }
if(a!=null && a.Length>0)
{
//加单位
int j=3;
for(int i=a.Length-1;i>=0;i--) {
if(a[i]!='零')
{
if(i==a.Length-1)
{
box3=a[i].ToString()+box3;
}
else
{
box3=a[i].ToString()+R1[j]+box3;
}
}
j--;
}
box3=box3+"亿"; }
//处理小数数部分
//替换数字
s2=rep(s2,len2);
string box4="";
for(int i=0;i<len2;i++) {
if(i<=1)
{
box4=box4 +s2[i].ToString()+R2[i];
}
}
box=box3+box2+box1+box4;
return box;
}//dowork
private char [] rep(char []s1,int len)
{
//替换数字
for(int i=0;i<len;i++)
{
switch(s1[i])
{
case '0':
s1[i]='零';
break;
case '1':
s1[i]='壹';
break;
case '2':
s1[i]='贰';
break;
case '3':
s1[i]='叁';
break;
case '4':
s1[i]='肆';
break;
case '5':
s1[i]='伍';
break;
case '6':
s1[i]='陆';
break;
case '7':
s1[i]='柒';
break;
case '8':
s1[i]='捌';
break;
case '9':
s1[i]='玖';
break;
} }//for
return s1;
}