使用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));
 }
 }
}
} 
(0)

相关推荐

  • word ppt excel文档转换成pdf的C#实现代码

    复制代码 代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; using Word = Microsoft.Office.Interop.Word;using Excel = Micro

  • C#对象与XMl文件之间的相互转换

    C#提供三种序列化方式,分别为:1.是使用BinaryFormatter进行串行化: 2.使用SoapFormatter进行串行化: 3.使用XmlSerializer进行串行化.其中对于BinaryFormatter的方式需要实现ISerializable接口,而XmlSeriializ不需要实现对应的接口,可以直接序列化.在这里面我们主要采用XMlSerialize来实现对应的序列化操作进而实现对应的对象和XMl文件之间的转换关系. 在通过序列化实现对应的转换关系操作的功能时,我首先创建了D

  • C# 生转换网页为pdf

    从htm生成pdf大概可以分两步实现,第一步,解析htm,就是将htm源文件中那一对文本转换为浏览器最终呈现给我们那种图文并茂的结果.这是一个不可完成的任务,因为目前为止业界的软件巨头也没有谁把htm解析做得很好的.对比ie.firefox等浏览器的显示结果便可想而知.既然业界难题,我也就不去钻牛角尖做技术攻关了,先跳过这步,考虑下一步的事情. 第二步,绘制pdf,这个简单,网上有很多资料,有兴趣的朋友可以研究 pdf的文件格式,安装二进制组装pdf.我有兴趣,然而没有时间,我觉得软件从业者时刻

  • C# 16进制与字符串、字节数组之间的转换

    复制代码 代码如下: /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <param name="hexString"></param> /// <returns></returns> private static byte[] strToToHexByte(string hexString) { hexString = hexString.Replace(&quo

  • C# XML与Json之间相互转换实例详解

    对于这转换其实很简单,其中最重要的就是先要引用类库.可以到官网进行下载引用http://json.codeplex.com. XML转换为Json字符串 复制代码 代码如下: string xml = @"<?xml version=""1.0"" standalone=""no""?>                             <root>                   

  • c# Base64编码和图片的互相转换代码

    事出有因 我们已经做了一个编辑器,这个编辑器可以以xml格式存储一些信息.在存储图片信息时我们碰到了一些问题.我们本来在xml信息中存储的是图片的路径,然而一旦客户把这个信息copy到其他电脑上而没有同时copy相关的图片时,就会出现一些问题.          后来,我们把图片数据转换为Base64编码,替代了原先存储图片路径的方式. 转换流程 将图片转化为Base64字符串的流程是:首先使用BinaryFormatter将图片文件序列化为二进制数据,然后使用Convert类的ToBase64

  • C# 将字节流转换为图片的实例方法

    复制代码 代码如下: usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Drawing; usingSystem.IO; namespaceMicrosoft.Form.Base {     classImageToByte     {         /// <summary>         /// 图片转换成字节流         /// </s

  • c#将list类型转换成DataTable方法示例

    复制代码 代码如下: /// <summary>       /// 将List转换成DataTable       /// </summary>       /// <typeparam name="T"></typeparam>       /// <param name="data"></param>       /// <returns></returns>   

  • C#将Word转换成PDF方法汇总(基于Office和WPS)

    有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然后让客户预览,下面来看一下基于Office和WPS的两种解决方案. 一.基于Office的解决方案 正如标题所说,基于Office就是要求服务器上面要安装的有Office.我们通过C#代码来调用COM接口,实现将Word转换成PDF.下面来看一下具体实现,首先引用Microsoft.Office.I

  • C#实现将Doc文档转换成rtf格式的方法示例

    本文实例讲述了C#实现将Doc文档转换成rtf格式的方法.分享给大家供大家参考,具体如下: 先在项目引用里添加上对Microsoft Word 9.0 object library的引用 using System; namespace DocConvert { class DoctoRtf { static void Main() { //创建一个word的实例 Word.application newApp = new Word.Application(); // 指定源文件和目标文件 obj

  • C# 操作XML文档 使用XmlDocument类方法

    W3C制定了XML DOM标准.很多编程语言中多提供了支持W3C XML DOM标准的API.我在之前的文章中介绍过如何使用Javascript对XML文档进行加载与查询.在本文中,我来介绍一下.Net中的XmlDocument类.它支持并扩展了W3C XML DOM标准.它将整个XML文档都先装载进内存中,然后再对XML文档进行操作,所以如果XML文档内容过大,不建议使用XmlDocument类,因为会消耗过多内存.对于很大的XML文档,可以使用XmlReader类来读取.因为XmlReade

  • C#编程读取文档Doc、Docx及Pdf内容的方法

    本文实例讲述了C#编程读取文档Doc.Docx及Pdf内容的方法.分享给大家供大家参考.具体分析如下: Doc文档:Microsoft Word 14.0 Object Library (GAC对象,调用前需要安装word.安装的word版本不同,COM的版本号也会不同) Docx文档:Microsoft Word 14.0 Object Library (GAC对象,调用前需要安装word.安装的word版本不同,COM的版本号也会不同) Pdf文档:PDFBox /* 作者:GhostBea

随机推荐