使用C#實現阿拉伯數字到大寫中文的轉換

來源:互聯網
上載者:User

using System;

namespace ConsoleApp
{
/// <summary>
/// 本類實現阿拉伯數字到大寫中文的轉換
/// 該類沒有對非法數字進行判別
/// 請調用NumToChn方法
/// </summary>
public class NumFormat
{
public NumFormat()
{
//
// TODO: 在此處添加建構函式邏輯
//
}

// 轉換數字
private char ToNum(char x)
{
string strChnNames="零一二三四五六七八九";
string strNumNames="0123456789";
return strChnNames[strNumNames.IndexOf(x)];
}

// 轉換萬以下整數
private string ChangeInt(string x)
{
string[] strArrayLevelNames=new string[4] {"","十","百","千"};
string ret = "";
int i;
for (i=x.Length-1;i>=0;i--)
if (x[i] == '0')
ret = ToNum(x[i]) + ret;
else
ret = ToNum(x[i]) + strArrayLevelNames[x.Length-1-i] + ret;
while ((i=ret.IndexOf("零零"))!=-1)
ret=ret.Remove(i, 1);
if (ret[ret.Length-1]=='零' && ret.Length>1)
ret=ret.Remove(ret.Length-1,1);
if (ret.Length>=2 && ret.Substring(0,2)=="一十")
ret=ret.Remove(0,1);
return ret;
}

// 轉換整數
private string ToInt(string x)
{
int len = x.Length;
string ret,temp;
if (len<=4)
ret = ChangeInt(x);
else if (len<=8)
{
ret = ChangeInt(x.Substring(0,len-4)) + "萬";
temp = ChangeInt(x.Substring(len-4,4));
if (temp.IndexOf("千")==-1 && temp!="")
ret += "零" + temp;
else
ret += temp;
}
else
{
ret=ChangeInt(x.Substring(0,len-8)) + "億";
temp=ChangeInt(x.Substring(len-8,4));
if (temp.IndexOf("千")==-1 && temp!="")
ret += "零" + temp;
else
ret += temp;
ret += "萬";
temp = ChangeInt(x.Substring(len-4,4));
if (temp.IndexOf("千")==-1 && temp!="")
ret += "零" + temp;
else
ret += temp;
}
int i;
if ((i=ret.IndexOf("零萬"))!=-1)
ret = ret.Remove(i+1,1);
while ((i=ret.IndexOf("零零"))!=-1)
ret = ret.Remove(i,1);
if (ret[ret.Length-1]=='零' && ret.Length>1)
ret = ret.Remove(ret.Length-1,1);
return ret;
}

private string ToDecimal(string x)
{
string ret="";
for (int i=0;i<x.Length;i++)
ret += ToNum(x[i]);
return ret;
}

public string NumToChn(string x)
{
if (x.Length==0)
return "";
string ret="";
if (x[0]=='-')
{
ret="負";
x=x.Remove(0,1);
}
if (x[0].ToString()==".")
x="0"+x;
if (x[x.Length-1].ToString()==".")
x=x.Remove(x.Length-1,1);
if (x.IndexOf(".")>-1)
ret += ToInt(x.Substring(0,x.IndexOf(".")))+"點"+ToDecimal(x.Substring(x.IndexOf(".")+1));
else
ret += ToInt(x);
return ret;
}
}
}

測試工程

using System;

namespace ConsoleApp
{
class MainClass
{
static void Main(string[] args)
{
/*
System.Console.WriteLine("Hello, The World!");

System.Console.WriteLine("My Love!");

ClassTest ct = new ClassTest();
System.Console.WriteLine(ct.Get_Str());
*/

/*
// 重載運算子
MyVector v1 = new MyVector(5, 12);
MyVector v2 = new MyVector(4, 3);
MyVector v3 = new MyVector();
v3 = v1 + v2;
System.Console.WriteLine("{0}測試一下", v3.Length);
*/

// 轉換成大寫數字
NumFormat nf = new NumFormat();
string x;
while (true)
{
Console.Write("X=");
x = Console.ReadLine();
if (x == "") break;
Console.WriteLine("{0}={1}", x, nf.NumToChn(x));
}
}
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.