C# 大小写转换(金额)实例代码
时间:2021-07-06 00:33:56
Class:EcanRMB.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Jxc.WinClient.BLL
{
public class EcanRMB
{
/// <summary>
/// 转换人民币大小金额
/// </summary>
/// <param name="num">金额</param>
/// <returns>返回大写形式</returns>
public string CmycurD(decimal num)
{
string str1 = "零壹贰叁肆伍陆柒捌玖"; //0-9所对应的汉字
string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
string str3 = ""; //从原num值中取出的值
string str4 = ""; //数字的字符串形式
string str5 = ""; //人民币大写金额形式
int i; //循环变量
int j; //num的值乘以100的字符串长度
string ch1 = ""; //数字的汉语读法
string ch2 = ""; //数字位的汉字读法
int nzero = 0; //用来计算连续的零值是几个
int temp; //从原num值中取出的值
num = Math.Round(Math.Abs(num), 2); //将num取绝对值并四舍五入取2位小数
str4 = ((long)(num * 100)).ToString(); //将num乘100并转换成字符串形式
j = str4.Length; //找出最高位
if (j > 15) { return "溢出"; }
str2 = str2.Substring(15 - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
//循环取出每一位需要转换的值
for (i = 0; i < j; i++)
{
str3 = str4.Substring(i, 1); //取出需转换的某一位的值
temp = Convert.ToInt32(str3); //转换为数字
if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
{
//当所取位数不为元、万、亿、万亿上的数字时
if (str3 == "0")
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
ch1 = str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
}
}
else
{
//该位是万亿,亿,万,元位等关键位
if (str3 != "0" && nzero != 0)
{
ch1 = "零" + str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
if (str3 != "0" && nzero == 0)
{
ch1 = str1.Substring(temp * 1, 1);
ch2 = str2.Substring(i, 1);
nzero = 0;
}
else
{
if (str3 == "0" && nzero >= 3)
{
ch1 = "";
ch2 = "";
nzero = nzero + 1;
}
else
{
if (j >= 11)
{
ch1 = "";
nzero = nzero + 1;
}
else
{
ch1 = "";
ch2 = str2.Substring(i, 1);
nzero = nzero + 1;
}
}
}
}
}
if (i == (j - 11) || i == (j - 3))
{
//如果该位是亿位或元位,则必须写上
ch2 = str2.Substring(i, 1);
}
str5 = str5 + ch1 + ch2;
if (i == j - 1 && str3 == "0")
{
//最后一位(分)为0时,加上“整”
str5 = str5 + '整';
}
}
if (num == 0)
{
str5 = "零元整";
}
return str5;
}
/**/
/// <summary>
/// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
/// </summary>
/// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
/// <returns></returns>
public string CmycurD(string numstr)
{
try
{
decimal num = Convert.ToDecimal(numstr);
return CmycurD(num);
}
catch
{
return "非数字形式!";
}
}
}
}
调用:
EcanRMB rmb = new EcanRMB();
string Rmb = txtAmount.Text.Replace(",", "").Replace("-","");
label9.Text = rmb.CmycurD(Rmb);
label11.Text = Convert.ToDecimal(txtAmount.Text).ToString("###,###,###.00");
标签:大小写,转换,金额
0
投稿
猜你喜欢
java 动态生成SQL的实例讲解
2021-05-25 18:26:06
基于JWT.NET的使用(详解)
2021-07-09 22:15:25
MyBatis实现模糊查询的几种方式
2023-06-03 17:31:43
解决Android 沉浸式状态栏和华为虚拟按键冲突问题
2023-10-15 14:08:14
WPF PasswordBox进行数据绑定方法
2022-05-23 03:53:11
Springboot动态切换数据源的具体实现与原理分析
2022-11-24 13:45:26
java中重写equals()方法的同时要重写hashcode()方法(详解)
2022-03-07 22:29:20
springmvc 分页查询的简单实现示例代码
2022-01-09 11:08:22
Java 实现简单静态资源Web服务器的示例
2021-06-16 17:12:55
详解Java字节码编程之非常好用的javassist
2021-08-27 04:54:30
Java 中Flyway的使用详解
2022-04-11 03:38:54
Java编程倒计时实现方法示例
2021-05-31 06:30:11
WebService教程详解(二)
2022-02-24 02:26:54
SpringBoot整合mybatis常见问题(小结)
2023-07-23 09:50:12
Spring Cloud Alibaba Nacos Config加载配置详解流程
2022-03-24 23:06:01
c#中LINQ的基本用法(二)
2022-05-29 07:00:43
C# Split分隔字符串的应用(C#、split、分隔、字符串)
2021-12-01 23:13:51
Android关于WebView中无法定位的问题解决
2022-10-26 07:16:13
基于Beanutils.copyProperties()的用法及重写提高效率
2023-04-20 12:10:25
深入了解Java接口回调机制
2023-11-09 15:52:05