寻找数字转英文的算法?

mayonglong 2008-06-24 03:24:50
不知哪位大侠能够提供一个数字转成英文的算法
e.g. 202,321.17 转换如下:


TWO HUNDRED AND TWO THOUSAND THREE HUNDRED AND TWENTY ONE AND CENTS SEVENTEEN ONLY
...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
csShooter 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 viena 的回复:]
http://singlepine.cnblogs.com/archive/2006/02/05/325754.html
[/Quote]
烈火焚身 2008-06-24
  • 打赏
  • 举报
回复
jf
mm6268 2008-06-24
  • 打赏
  • 举报
回复
jjjjjjjj
jinjazz 2008-06-24
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string str= new convertor().numberToEnglish(decimal.Parse("202321.17"));
}

class convertor
{
public string numberToEnglish(decimal y)
{
string numberStr = "";
string lStr = "";//小数点左边字符串
string rStr = "";//小数点右边字符串
numberStr = (string)y.ToString();
int dot;//小数点位置
dot = numberStr.IndexOf(".");
if (dot != 0 & dot != -1)//判断有没有小数
{
lStr = numberStr.Substring(0, dot);//取小数点left的字串
if (numberStr.Substring(dot + 1, 2) == "00")
{
rStr = "";
}
else
{
rStr = numberStr.Substring(dot + 1, 2);//取小数点right的字串
}
}
else
{
lStr = numberStr;//没有小数点的情况
}
string lStrRev;
lStrRev = reverseString(lStr);//对左边的字串取反字串
string[] a = new string[5];//定义5个字串变量用来存放解析出的三位一组的字串

switch (lStrRev.Length % 3)
{
case 1:
lStrRev = lStrRev + "00"; break;

case 2:
lStrRev = lStrRev + "0"; break;

}
string StrInt;//用来存放转换后的整数部分
StrInt = "";
for (int i = 0; i <= lStrRev.Length / 3 - 1; i++)//计算有多少个三位
{
a[i] = reverseString(lStrRev.Substring(3 * i, 3));//截取第1个三位
if (a[i] != "000")//用来避免这种情况“1000000=ONE MILLION THOUSAND ONLY”
{
if (i != 0)
{
StrInt = w3(a[i]) + " " + dw(i.ToString()) + " " + StrInt;//用来加上“THOUSAND OR MILLION OR BILLION”
}
else
{
StrInt = w3(a[i]);//防止i=0时“lm=w3(a(i))+" "+dw(i)+" "+lm”多加两个尾空格
}
}
else
{
StrInt = w3(a[i]) + StrInt;
}
}
string StrDce;//用来存放转换后的小数部分
StrDce = "";
if (dot != 0 & dot != -1 & rStr != "")
{
rStr = "0" + rStr;
StrDce = " AND POINT " + w2(rStr);
}
return StrInt + StrDce;
}
//将字符串反置
private string reverseString(string str)
{
int lenInt = str.Length;
string[] z = new string[str.Length];
for (int i = 0; i < lenInt; i++)
{
z[i] = str.Substring(i, 1);
}
str = "";
for (int i = lenInt - 1; i >= 0; i--)
{
str = str + z[i];
}
return str;
}
private string zr4(string y)
{
string[] z = new string[10];
z[1] = "ONE";
z[2] = "TWO";
z[3] = "THREE";
z[4] = "FOUR";
z[5] = "FIVE";
z[6] = "SIX";
z[7] = "SEVEN";
z[8] = "EIGHT";
z[9] = "NINE";
return z[Int32.Parse(y.Substring(0, 1))];
}
private string zr3(string y)
{
string[] z = new string[10];
z[1] = "ONE";
z[2] = "TWO";
z[3] = "THREE";
z[4] = "FOUR";
z[5] = "FIVE";
z[6] = "SIX";
z[7] = "SEVEN";
z[8] = "EIGHT";
z[9] = "NINE";
return z[Int32.Parse(y.Substring(2, 1))];
}
private string zr2(string y)
{
string[] z = new string[20];
z[10] = "TEN";
z[11] = "ELEVEN";
z[12] = "TWELVE";
z[13] = "THIRTEEN";
z[14] = "FOURTEEN";
z[15] = "FIFTEEN";
z[16] = "SIXTEEN";
z[17] = "SEVENTEEN";
z[18] = "EIGHTEEN";
z[19] = "NINETEEN";
return z[Int32.Parse(y.Substring(1, 2))];
}
private string zr1(string y)
{
string[] z = new string[10];
z[1] = "TEN";
z[2] = "TWENTY";
z[3] = "THIRTY";
z[4] = "FORTY";
z[5] = "FIFTY";
z[6] = "SIXTY";
z[7] = "SEVENTY";
z[8] = "EIGHTY";
z[9] = "NINETY";
return z[Int32.Parse(y.Substring(1, 1))];
}
private string dw(string y)
{
string[] z = new string[5];
z[0] = "";
z[1] = "THOUSAND";
z[2] = "MILLION";
z[3] = "BILLION";
return z[Int32.Parse(y)];
}
//用来制作2位数字转英文
private string w2(string y)
{
string tempstr;
if (y.Substring(1, 1) == "0")//判断是否小于十
tempstr = zr3(y);
else
if (y.Substring(1, 1) == "1")//判断是否在十到二十之间
tempstr = zr2(y);
else
{
if (y.Substring(2, 1) == "0")//判断是否为大于二十小于一百的能被十整除的数(为了去掉尾空格)
{
tempstr = zr1(y);
}
else
{
tempstr = zr1(y) + " " + zr3(y);
}
}
return tempstr;
}
private string w3(string y)
{
string tempstr;
if (y.Substring(0, 1) == "0")//判断是否小于一百
tempstr = w2(y);
else
{
if (y.Substring(1, 2) == "00")//判断是否能被一百整除
{
tempstr = zr4(y) + " " + "HUNDRED";
}
else
{
tempstr = zr4(y) + " " + "HUNDRED" + " " + "AND" + " " + w2(y);//不能整除的要后面加“AND”
}
}
return tempstr;
}
}
}

}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧