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

作者:mdxy-dxy 时间:2023-03-03 16:34:16 

 先记下来,以备后用!


 /// <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.49123.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();
   }

测试结果:

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

下面是其它网友的补充:


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
投稿

猜你喜欢

  • SSH框架网上商城项目第23战之在线支付功能实现

    2023-04-22 22:49:19
  • 基于Android LayoutInflater的使用介绍

    2023-12-22 23:50:03
  • Spring JPA联表查询之注解属性详解

    2021-11-04 14:19:04
  • Java超细致讲解数组的使用

    2022-07-20 06:25:16
  • C#获取远程XML文档的方法

    2023-06-26 17:41:16
  • RocketMQ存储文件的实现

    2023-03-16 15:11:27
  • 基于java构造方法Vector修改元素源码分析

    2023-11-25 10:54:56
  • Android setButtonDrawable()的兼容问题解决办法

    2021-12-11 04:33:52
  • C#控件Picturebox实现鼠标拖拽功能

    2021-10-30 20:52:36
  • C#动态webservice调用接口

    2023-10-18 07:22:00
  • Android Studio的安装及第一次启动时的配置问题

    2021-12-23 08:29:27
  • java实现文件夹解压和压缩

    2022-06-07 03:00:39
  • spring boot 日志配置详解

    2023-09-24 00:23:11
  • Android 实现悬浮窗功能

    2021-09-17 20:02:07
  • Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)

    2022-07-31 14:39:23
  • 引入mybatis-plus报 Invalid bound statement错误问题的解决方法

    2021-06-01 14:28:00
  • 一篇文章弄懂kotlin的扩展方法

    2022-06-05 08:06:20
  • 高并发下restTemplate的错误分析方式

    2023-08-23 12:58:24
  • C#使用XML序列化操作菜单的方法

    2022-08-03 08:54:34
  • Java Swing JProgressBar进度条的实现示例

    2023-07-15 17:48:47
  • asp之家 软件编程 m.aspxhome.com