在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额。现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换为中文大写。C#实现将人民币金额转换为大写的流程也不复杂,100行代码都不需要,具体的实现参见以下详细文档。

定义一个工具类RmbHelper,该类主要的功能就是转换人民币大小金额。具体的实现代码如下:

  /// <summary>
/// RmbHelper将阿拉伯数字形式的人民币金额转换为中文大写
/// </summary>
public class RmbHelper
{
/// <summary>
/// 转换人民币大小金额
/// </summary>
/// <param name="num">金额</param>
/// <returns>返回大写形式</returns>
public static 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 = ; //用来计算连续的零值是几个
int temp; //从原num值中取出的值
num = Math.Round(Math.Abs(num), ); //将num取绝对值并四舍五入取2位小数
str4 = ((long)(num * )).ToString(); //将num乘100并转换成字符串形式
j = str4.Length; //找出最高位
if (j > ) { return "溢出"; }
str2 = str2.Substring( - j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
//循环取出每一位需要转换的值
for (i = ; i < j; i++)
{
str3 = str4.Substring(i, ); //取出需转换的某一位的值
temp = Convert.ToInt32(str3); //转换为数字
if (i != (j - ) && i != (j - ) && i != (j - ) && i != (j - ))
{
//当所取位数不为元、万、亿、万亿上的数字时
if (str3 == "")
{
ch1 = "";
ch2 = "";
nzero = nzero + ;
}
else
{
if (str3 != "" && nzero != )
{
ch1 = "零" + str1.Substring(temp * , );
ch2 = str2.Substring(i, );
nzero = ;
}
else
{
ch1 = str1.Substring(temp * , );
ch2 = str2.Substring(i, );
nzero = ;
}
}
}
else
{
//该位是万亿,亿,万,元位等关键位
if (str3 != "" && nzero != )
{
ch1 = "零" + str1.Substring(temp * , );
ch2 = str2.Substring(i, );
nzero = ;
}
else
{
if (str3 != "" && nzero == )
{
ch1 = str1.Substring(temp * , );
ch2 = str2.Substring(i, );
nzero = ;
}
else
{
if (str3 == "" && nzero >= )
{
ch1 = "";
ch2 = "";
nzero = nzero + ;
}
else
{
if (j >= )
{
ch1 = "";
nzero = nzero + ;
}
else
{
ch1 = "";
ch2 = str2.Substring(i, );
nzero = nzero + ;
}
}
}
}
}
if (i == (j - ) || i == (j - ))
{
//如果该位是亿位或元位,则必须写上
ch2 = str2.Substring(i, );
}
str5 = str5 + ch1 + ch2;
if (i == j - && str3 == "")
{
//最后一位(分)为0时,加上“整”
str5 = str5 + '整';
}
}
if (num == )
{
str5 = "零元整";
}
return str5;
}
/**/
/// <summary>
/// 一个重载,将字符串先转换成数字在调用CmycurD(decimal num)
/// </summary>
/// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
/// <returns></returns>
public static string CmycurD(string numstr)
{
try
{
decimal num = Convert.ToDecimal(numstr);
return CmycurD(num);
}
catch
{
return "非数字形式!";
}
}
}

备注:原文转载自C#工具类:人民币金额转换为中文大写_IT技术小趣屋

博主个人技术交流群:960640092,博主微信公众号如下:

【转载】C#工具类:人民币金额转换为中文大写的更多相关文章

  1. JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值

    JS实现 阿拉伯数字金额转换为中文大写金额 可以处理负值 //************************* 把数字金额转换成中文大写数字的函数(可处理负值) ****************** ...

  2. C# 金额转中文大写

    今天看到一个库是把金额转中文大写,看起来很容易,所以我就自己写了 创建的项目是创建一个 dot net core 的项目,实际上这个项目可以创建为 Stand 的. 首先创建类,这个类的构造传入一个 ...

  3. 2018-4-29-C#-金额转中文大写

    title author date CreateTime categories C# 金额转中文大写 lindexi 2018-04-29 09:50:38 +0800 2018-04-02 21:4 ...

  4. C# 日期转换为中文大写

    /// <summary> /// 日期转换为中文大写 /// </summary> public class UpperConvert { public UpperConve ...

  5. Java 阿拉伯数字转换为中文大写数字

    Java 阿拉伯数字转换为中文大写数字 /** * <html> * <body> * <P> Copyright 1994 JsonInternational&l ...

  6. C#实现,C++实现,JS实现 阿拉伯数字金额转换为中文大写金额

    推荐在线编译器  ideone 1. C#实现 :带有负数处理 //把数字金额转换成中文大写数字的函数 //带有负值处理 function changeNumMoneyToChinese(money) ...

  7. Java读取properties文件工具类并解决控制台中文乱码

    1.建立properts文件(error.message.properties) HTTP201= 请求成功并且服务器创建了新的资源 2.在spring-mvc.xml文件(applicationCo ...

  8. [转载]Process工具类,提供设置timeout功能

    FROM:http://segmentfault.com/blog/lidonghao/1190000000372535 在前一篇博文中,简单介绍了如何使用Process类来调用命令行的功能,那样使用 ...

  9. Python TIPS上一道关于人民币金额小写转大写的题

    人民币金额打印 题目链接:here.我发现我写的好复杂,但万幸编码还算符合人类,看了其他答案,感觉都是天书. #!/usr/bin/env python # -*- coding: utf-8 -*- ...

随机推荐

  1. C++实验一

    实验结论 2-28 if...else #include <iostream> #include <stdlib.h> using namespace std; int mai ...

  2. Linux下不同文件不同颜色的意义

    通常,我们使用ls查看文件时,会出现不同颜色的文件,今天我就大概写一下不同颜色的代表意义: 蓝色————目录: 绿色————可执行文件: 红色————压缩文件: 浅蓝色————链接文件: 紫红色——— ...

  3. SEED实验——return-to-libc实验

    实验概述 本实验的学习目标是让学生获得缓冲区溢出攻击的一种有趣变体——return-to-libc攻击实验的亲身体验.这种攻击可以绕过目前在主要linux操作系统中实现的现有保护方案.利用缓冲区溢出漏 ...

  4. QEMU KVM Libvirt手册(10): KVM的各种限制

    Overcommits KVM allows for both memory and disk space overcommit. However, hard errors resulting fro ...

  5. JavaScript 异步编程的前世今生(下)

    ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路,马上就有人 ...

  6. 【RL-TCPnet网络教程】第18章 BSD Sockets基础知识

    第18章      BSD Sockets基础知识 本章节为大家讲解BSD Sockets,需要大家对BSD Sockets有个基础的认识,方便后面章节Socket实战操作. (本章的知识点主要整理自 ...

  7. 【逆元】HDU-1576

    逆元: 同余方程 ax≡1(mod n),gcd(a,n) = 1 时有解,这时称求出的 x 为 a 的对模n的乘法逆元.(注意:如果gcd(a,n)如果不等于1则无解),解法还是利用扩展欧几里得算法 ...

  8. [Swift]LeetCode829. 连续整数求和 | Consecutive Numbers Sum

    Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers? ...

  9. springboot 实战之一站式开发体验

    都说springboot是新形势的主流框架工具,然而我的工作中并没有真正用到springboot: 都说springboot里面并没有什么新技术,不过是组合了现有的组件而已,但是自己却说不出来: 都说 ...

  10. Java 8中用法优雅的Stream,性能也"优雅"吗?

    之前的文章中我们介绍了Java 8中Stream相关的API,我们提到Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码. 那么,Stream API的性能到 ...