使用C#实现阿拉伯数字到大写中文的转换

 更新时间:2007年03月09日 00:00:00   投稿:mdxy-dxy  
这篇文章主要介绍了C#实现阿拉伯数字转为大写中文的实现代码,需要的朋友可以参考下

 先记下来,以备后用!

  /// <summary>
  /// 金额转为大写金额
  /// </summary>
  public class MoneyConvertChinese
  {
    /// <summary>
    /// 金额转为大写金额
    /// </summary>
    /// <param name="LowerMoney"></param>
    /// <returns></returns>
    public string MoneyToChinese(string LowerMoney)
    {
      string functionReturnValue = null;
      bool IsNegative = false; // 是否是负数
      if (LowerMoney.Trim().Substring(0, 1) == "-")
      {
        // 是负数则先转为正数
        LowerMoney = LowerMoney.Trim().Remove(0, 1);
        IsNegative = true;
      }
      string strLower = null;
      string strUpart = null;
      string strUpper = null;
      int iTemp = 0;
      // 保留两位小数 123.489→123.49  123.4→123.4
      LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString();
      if (LowerMoney.IndexOf(".") > 0)
      {
        if (LowerMoney.IndexOf(".") == LowerMoney.Length - 2)
        {
          LowerMoney = LowerMoney + "0";
        }
      }
      else
      {
        LowerMoney = LowerMoney + ".00";
      }
      strLower = LowerMoney;
      iTemp = 1;
      strUpper = "";
      while (iTemp <= strLower.Length)
      {
        switch (strLower.Substring(strLower.Length - iTemp, 1))
        {
          case ".":
            strUpart = "圆";
            break;
          case "0":
            strUpart = "零";
            break;
          case "1":
            strUpart = "壹";
            break;
          case "2":
            strUpart = "贰";
            break;
          case "3":
            strUpart = "叁";
            break;
          case "4":
            strUpart = "肆";
            break;
          case "5":
            strUpart = "伍";
            break;
          case "6":
            strUpart = "陆";
            break;
          case "7":
            strUpart = "柒";
            break;
          case "8":
            strUpart = "捌";
            break;
          case "9":
            strUpart = "玖";
            break;
        }

        switch (iTemp)
        {
          case 1:
            strUpart = strUpart + "分";
            break;
          case 2:
            strUpart = strUpart + "角";
            break;
          case 3:
            strUpart = strUpart + "";
            break;
          case 4:
            strUpart = strUpart + "";
            break;
          case 5:
            strUpart = strUpart + "拾";
            break;
          case 6:
            strUpart = strUpart + "佰";
            break;
          case 7:
            strUpart = strUpart + "仟";
            break;
          case 8:
            strUpart = strUpart + "万";
            break;
          case 9:
            strUpart = strUpart + "拾";
            break;
          case 10:
            strUpart = strUpart + "佰";
            break;
          case 11:
            strUpart = strUpart + "仟";
            break;
          case 12:
            strUpart = strUpart + "亿";
            break;
          case 13:
            strUpart = strUpart + "拾";
            break;
          case 14:
            strUpart = strUpart + "佰";
            break;
          case 15:
            strUpart = strUpart + "仟";
            break;
          case 16:
            strUpart = strUpart + "万";
            break;
          default:
            strUpart = strUpart + "";
            break;
        }

        strUpper = strUpart + strUpper;
        iTemp = iTemp + 1;
      }

      strUpper = strUpper.Replace("零拾", "零");
      strUpper = strUpper.Replace("零佰", "零");
      strUpper = strUpper.Replace("零仟", "零");
      strUpper = strUpper.Replace("零零零", "零");
      strUpper = strUpper.Replace("零零", "零");
      strUpper = strUpper.Replace("零角零分", "整");
      strUpper = strUpper.Replace("零分", "整");
      strUpper = strUpper.Replace("零角", "零");
      strUpper = strUpper.Replace("零亿零万零圆", "亿圆");
      strUpper = strUpper.Replace("亿零万零圆", "亿圆");
      strUpper = strUpper.Replace("零亿零万", "亿");
      strUpper = strUpper.Replace("零万零圆", "万圆");
      strUpper = strUpper.Replace("零亿", "亿");
      strUpper = strUpper.Replace("零万", "万");
      strUpper = strUpper.Replace("零圆", "圆");
      strUpper = strUpper.Replace("零零", "零");

      // 对壹圆以下的金额的处理
      if (strUpper.Substring(0, 1) == "圆")
      {
        strUpper = strUpper.Substring(1, strUpper.Length - 1);
      }
      if (strUpper.Substring(0, 1) == "零")
      {
        strUpper = strUpper.Substring(1, strUpper.Length - 1);
      }
      if (strUpper.Substring(0, 1) == "角")
      {
        strUpper = strUpper.Substring(1, strUpper.Length - 1);
      }
      if (strUpper.Substring(0, 1) == "分")
      {
        strUpper = strUpper.Substring(1, strUpper.Length - 1);
      }
      if (strUpper.Substring(0, 1) == "整")
      {
        strUpper = "零圆整";
      }
      functionReturnValue = strUpper;

      if (IsNegative == true)
      {
        return "负" + functionReturnValue;
      }
      else
      {
        return functionReturnValue;
      }
    }
  }

测试代码:

    static void Main(string[] args)
    {
      Console.Write("请输入要转成大写的数字:");
      string str = Console.ReadLine();
      Console.WriteLine("大写:" + new MoneyConvertChinese().MoneyToChinese(str));
      Console.ReadLine();
    }

测试结果:

下面是其它网友的补充:

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)); 
 } 
 } 
} 
} 

相关文章

  • C#切换鼠标左右键习惯无需控制面板中修改

    C#切换鼠标左右键习惯无需控制面板中修改

    本人一直喜欢左手使用鼠标,偶尔同事会临时操作一下,因为他的习惯是右手,还得在控制面板里进行更改,太麻烦了所以就编写一个控制台程序,双击一下即可切换左右键,热爱懒人的你可不要错过了哈
    2013-02-02
  • C#获取Word文档中所有表格的实现代码分享

    C#获取Word文档中所有表格的实现代码分享

    这篇文章主要介绍了C#获取Word文档中所有表格的实现代码分享,小编亲测可用,需要的朋友可以参考下
    2014-09-09
  • C# wpf 无边框窗口添加阴影效果的实现

    C# wpf 无边框窗口添加阴影效果的实现

    在本篇内容中小编给大家整理了一篇关于C# wpf 无边框窗口添加阴影效果的具体方法内容,有兴趣的朋友们可以学习参考下
    2022-11-11
  • 详解C# 利用反射根据类名创建类的实例对象

    详解C# 利用反射根据类名创建类的实例对象

    这篇文章主要介绍了详解C# 利用反射根据类名创建类的实例对象,“反射”其实就是利用程序集的元数据信息,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • C#在子线程中更新窗口部件的写法

    C#在子线程中更新窗口部件的写法

    这篇文章主要介绍了C#在子线程中更新窗口部件的写法,本文直接给出代码示例,需要的朋友可以参考下
    2015-06-06
  • C#实现条形码识别的解决方案分享

    C#实现条形码识别的解决方案分享

    主流的识别库主要有ZXing.NET和ZBar,OpenCV 4.0后加入了QR码检测和解码功能,所以本文主要和大家分享了使用ZBar进行条形码识别的示例代码,需要的可以参考一下
    2023-07-07
  • C#Js时间格式化问题简单实例

    C#Js时间格式化问题简单实例

    这篇文章介绍了C#Js时间格式化问题简单实例,有需要的朋友可以参考一下
    2013-10-10
  • C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    这篇文章主要介绍了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,以实例形式较为详细的讲述了.NET Framework里面提供的三种Timer具体用法,需要的朋友可以参考下
    2014-10-10
  • C#实现发送手机验证码功能

    C#实现发送手机验证码功能

    之前基于c#实现手机发送验证码功能很复杂,真正做起来也就那回事,不过就是一个post请求就可以实现的东西,今天小编把思路分享到脚本之家平台,供大家参考下
    2017-06-06
  • C#实现winform版飞行棋

    C#实现winform版飞行棋

    这篇文章主要为大家详细介绍了C#实现winform版飞行,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论