You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

366 lines
9.3 KiB
C#

10 months ago
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
using System.Threading;
namespace DSWeb.EntityDA
{
//大小写转换
public enum CharCase
{
avsSentencecase,
avslowercase,
avsUPPERCASE,
avsTitleCase
}
//将阿拉伯数字转换为英文货币
public class MoneyConvert
{
//定义1-19的英文数字
private string[] Num1_20 = new string[20];
//定义20-90的英文数字
private string[] Num20_90 = new string[10];
string numberInWord = string.Empty;
Decimal number = 0;
CharCase charCase = CharCase.avsUPPERCASE;
string currency = "SAY:";
bool showonly = false;
//构造函数,为数组赋初值
public MoneyConvert()
{
Num1_20[1] = "One";
Num1_20[2] = "Two";
Num1_20[3] = "Three";
Num1_20[4] = "Four";
Num1_20[5] = "Five";
Num1_20[6] = "Six";
Num1_20[7] = "Seven";
Num1_20[8] = "Eight";
Num1_20[9] = "Nine";
Num1_20[10] = "Ten";
Num1_20[11] = "Eleven";
Num1_20[12] = "Twelve";
Num1_20[13] = "Thirteen";
Num1_20[14] = "Fourteen";
Num1_20[15] = "Fifteen";
Num1_20[16] = "Sixteen";
Num1_20[17] = "Seventeen";
Num1_20[18] = "Eighteen";
Num1_20[19] = "Nineteen";
Num20_90[2] = "Twenty";
Num20_90[3] = "Thirty";
Num20_90[4] = "Forty";
Num20_90[5] = "Fifty";
Num20_90[6] = "Sixty";
Num20_90[7] = "Seventy";
Num20_90[8] = "Eighty";
Num20_90[9] = "Ninety";
}
//计算1-99之间的数并转换为英文
private string F1_99(long inum)
{
string str = string.Empty;
if (inum >= 1 && inum <= 19)
{
str = F1_19(inum);
}
if (inum >= 20 && inum <= 99)
{
if (inum % 10 == 0)
{
str = F20_90(inum / 10);
}
else
{
str = F20_90(inum / 10) + " " + F1_19(inum % 10);
}
}
return str;
}
private string F1_999(long inum)
{
string str = string.Empty;
if (inum == 0)
{
str = "";
}
if (inum >= 1 && inum <= 99)
{
str = F1_99(inum);
}
if (inum >= 100 && inum <= 999)
{
str = F100_999(inum);
}
return str;
}
private string F100_999(long inum)
{
if (inum % 100 != 0)
{
return F1_19(inum / 100) + " Hundred and " + F1_99(inum % 100);
}
else
{
return F1_19(inum / 100) + " Hundred";
}
}
private string F1000_999999(long inum)
{
if (inum % 1000 != 0)
{
if ((inum % 1000) / 100 >= 1)
{
if (inum > 1000)
{
return F1_999(inum / 1000) + " Thousand " + F1_999(inum % 1000);
}
else
{
return F1_999(inum / 1000) + F1_999(inum % 1000);
}
}
else
{
if (inum > 1000)
{
return F1_999(inum / 1000) + " Thousand and " + F1_999(inum % 1000);
}
else
{
return F1_999(inum / 1000) + " and " + F1_999(inum % 1000);
}
}
}
else
{
return F1_999(inum / 1000) + " Thousand";
}
}
private string F1000000_999999999(long inum)
{
if (inum % 1000000 != 0)
{
return F1_999(inum / 1000000) + " Million " + F1000_999999(inum % 1000000);
}
else
{
return F1_999(inum / 1000000) + " Million";
}
}
private string F20_90(long inum)
{
return Find_word_20_90(inum);
}
private string F1_19(long inum)
{
return Find_word_1_19(inum);
}
private string Find_word_1_19(long inum)
{
string Cword = string.Empty;
Cword = Num1_20[inum];
return Cword;
}
private string Find_word_20_90(long inum)
{
string Cword = string.Empty;
Cword = Num20_90[inum];
return Cword;
}
private void ChangeCase()
{
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
switch (charCase)
{
case CharCase.avslowercase: numberInWord = numberInWord.ToLower();
break;
case CharCase.avsUPPERCASE: numberInWord = numberInWord.ToUpper();
break;
case CharCase.avsTitleCase: numberInWord = textInfo.ToTitleCase(numberInWord);
break;
}
}
private void ChangeCurrency()
{
numberInWord = currency.Trim() + " " + numberInWord.Trim();
}
private void ChangeShowOnly()
{
//空白定义
}
private void ChangeNumber()
{
string orgstr = string.Empty;
//两位小数
orgstr = number.ToString("F2");
int lint = orgstr.Length;
int intvalue = int.Parse(orgstr.Substring(0, lint - 3));
int decvalue = int.Parse(orgstr.Substring(lint - 2, 2));
if (intvalue < 0 || intvalue > 999999999)
{
numberInWord = "Out of Range!";
}
else
{
numberInWord = NToE(intvalue);
if (decvalue > 0)
{
int i = numberInWord.IndexOf(" and".Trim());
// if (i > 0)
// {
// numberInWord = numberInWord.Remove(i, 3);
numberInWord = numberInWord + " and " + NToE(decvalue) + " cents";
if (showonly)
{
numberInWord = numberInWord + " only ";
}
//}
}
else
{
if (showonly)
{
numberInWord = numberInWord + " only ";
}
}
}
}
private string NToE(long inum)
{
string Count_string = string.Empty;
if (inum == 0)
{
Count_string = "Zero";
}
else
{
if (inum >= 1 && inum <= 999)
{
Count_string = F1_999(inum);
}
else if (inum >= 1000 && inum <= 999999)
{
Count_string = F1000_999999(inum);
}
else if (inum >= 1000000 && inum <= 999999999)
{
Count_string = F1000000_999999999(inum);
}
}
return Count_string;
}
private void Update()
{
}
public string NumberInWorld
{
get
{
return numberInWord;
}
set
{
numberInWord = value;
}
}
public Decimal Number
{
get
{
return number;
}
set
{
number = value;
ChangeNumber();
}
}
public CharCase NumberCase
{
get { return charCase; }
set
{
charCase = value;
ChangeCase();
}
}
public string Currency
{
get { return currency; }
set
{
currency = value;
ChangeCurrency();
}
}
public bool ShowOnly
{
get { return showonly; }
set
{
showonly = true;
ChangeShowOnly();
}
}
public static string ConverDigToEng(Decimal number)
{
MoneyConvert mct = new MoneyConvert();
mct.Number = number;
mct.NumberCase = CharCase.avsUPPERCASE;
mct.Currency = "SAY:";
mct.ShowOnly = true;
return mct.NumberInWorld;
}
}
}