人民币转换为中文大写
自己整理
JavaScript版:
function cmycurd(num){ //转成人民币大写金额形式
var str1 = '零壹贰叁肆伍陆柒捌玖'; //0-9所对应的汉字
var str2 = '万仟佰拾亿仟佰拾万仟佰拾元角分'; //数字位所对应的汉字
var str3; //从原num值中取出的值
var str4; //数字的字符串形式
var str5 = ''; //人民币大写金额形式
var i; //循环变量
var j; //num的值乘以100的字符串长度
var ch1; //数字的汉语读法
var ch2; //数字位的汉字读法
var nzero = 0; //用来计算连续的零值是几个
num = Math.abs(num).toFixed(2); //将num取绝对值并四舍五入取2位小数
str4 = (num * 100).toFixed(0).toString(); //将num乘100并转换成字符串形式
j = str4.length; //找出最高位
if (j > 15){return '溢出';}
str2 = str2.substr(15-j); //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分
//循环取出每一位需要转换的值
for(i=0;i<j;i++){
str3 = str4.substr(i,1); //取出需转换的某一位的值
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.substr(str3*1,1);
ch2 = str2.substr(i,1);
nzero = 0;
}
else{
ch1 = str1.substr(str3*1,1);
ch2 = str2.substr(i,1);
nzero = 0;
}
}
}
else{ //该位是万亿,亿,万,元位等关键位
if (str3 != '0' && nzero != 0){
ch1 = "零" + str1.substr(str3*1,1);
ch2 = str2.substr(i,1);
nzero = 0;
}
else{
if (str3 != '0' && nzero == 0){
ch1 = str1.substr(str3*1,1);
ch2 = str2.substr(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.substr(i,1);
nzero = nzero + 1;
}
}
}
}
}
if (i == (j-11) || i == (j-3)){ //如果该位是亿位或元位,则必须写上
ch2 = str2.substr(i,1);
}
str5 = str5 + ch1 + ch2;
if (i == j-1 && str3 == '0' ){ //最后一位(分)为0时,加上“整”
str5 = str5 + '整';
}
}
if (num == 0){
str5 = '零元整';
}
return str5;
}
c#版
using System;
namespace ExpertLib.ChineseSpecial
{
#region RMBException
/// <summary>
/// 人民币转换的错误
/// </summary>
public class RMBException : System.Exception
{
public RMBException(string msg)
: base(msg)
{
}
}
#endregion
/// <summary>
/// 实现将人民币的数字形式转换为中文格式,最大支持9兆兆。
/// </summary>
public static class RMB
{
#region 内部常量
private static string RMBUppercase = "零壹贰叁肆伍陆柒捌玖";
private static string RMBUnitChar = "元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟万拾佰仟亿拾佰仟兆"; //人民币整数位对应的标志
private const decimal MaxNumber =9999999999999999999999999.99m;
private const decimal MinNumber = -9999999999999999999999999.99m;
private static char[] cDelim = { '.' }; //小数分隔标识
#endregion
#region Convert
#region Convert <decimal>
/// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="digital"></param>
/// <returns></returns>
public static string Convert(decimal number)
{
bool NegativeFlag=false;
decimal RMBNumber;
CheckNumberLimit(number);
RMBNumber = Math.Round(number, 2); //将四舍五入取2位小数
if (RMBNumber == 0)
{
return "零元整";
}
else if(RMBNumber < 0) //如果是负数
{
NegativeFlag = true;
RMBNumber = Math.Abs(RMBNumber); //取绝对值
}
else
{
NegativeFlag = false;
}
string buf = ""; // 存放返回结果
string strDecPart = ""; // 存放小数部分的处理结果
string strIntPart = ""; // 存放整数部分的处理结果
string[] tmp = null;
string strDigital = RMBNumber.ToString();
tmp = strDigital.Split(cDelim, 2); // 将数据分为整数和小数部分
if (RMBNumber >= 1m) // 大于1时才需要进行整数部分的转换
{
strIntPart = ConvertInt(tmp[0]);
}
if (tmp.Length > 1) //分解出了小数
{
strDecPart = ConvertDecimal(tmp[1]);
}
else //没有小数肯定是为整
{
strDecPart = "整";
}
if (NegativeFlag==false) //是否负数
{
buf = strIntPart + strDecPart;
}
else
{
buf = "负"+strIntPart + strDecPart;
}
return buf;
}
#endregion
#region Convert <double>
/// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(double number)
{
decimal dec;
try
{
dec = System.Convert.ToDecimal(number);
}
catch
{
throw new RMBException("不能转成标准的decimal类型:" + number.ToString());
}
return Convert(dec);
}
#endregion
#region Convert <float>
/// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(float number)
{
decimal dec;
try
{
dec = System.Convert.ToDecimal(number);
}
catch
{
throw new RMBException("不能转成标准的decimal类型:" + number.ToString());
}
return Convert(dec);
}
#endregion
#region Convert <int>
/// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(int number)
{
decimal dec;
dec = System.Convert.ToDecimal(number);
return Convert(dec);
}
#endregion
#region Convert <long>
/// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(long number)
{
decimal dec;
dec = System.Convert.ToDecimal(number);
return Convert(dec);
}
#endregion
#region Convert <string>
/// <summary>
/// 转换成人民币大写形式
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string Convert(string number)
{
decimal dec;
try
{
dec = System.Convert.ToDecimal(number,null);
}
catch
{
throw new RMBException("不能转成标准的decimal类型:" + number);
}
return Convert(dec);
}
#endregion
#endregion
#region MaxSupportNumber
/// <summary>
/// 支持的最大转换数
/// </summary>
public static decimal MaxSupportNumber
{
get
{
return MaxNumber;
}
}
#endregion
#region MinSupportNumber
/// <summary>
/// 支持的最小数
/// </summary>
public static decimal MinSupportNumber
{
get
{
return MinNumber;
}
}
#endregion
#region 内部函数
#region ConvertInt
private static string ConvertInt(string intPart)
{
string buf = "";
int length = intPart.Length;
int curUnit = length;
// 处理除个位以上的数据
string tmpValue = ""; // 记录当前数值的中文形式
string tmpUnit = ""; // 记录当前数值对应的中文单位
int i;
for (i = 0; i < length - 1; i++, curUnit--)
{
if (intPart[i] != '0')
{
tmpValue = DigToCC(intPart[i]);
tmpUnit = GetUnit(curUnit - 1);
}
else
{
// 如果当前的单位是"万、亿",则需要把它记录下来
if ((curUnit - 1) % 4 == 0)
{
tmpValue = "";
tmpUnit = GetUnit(curUnit - 1);//
}
else
{
tmpUnit = "";
// 如果当前位是零,则需要判断它的下一位是否为零,再确定是否记录'零'
if (intPart[i + 1] != '0')
{
tmpValue = "零";
}
else
{
tmpValue = "";
}
}
}
buf += tmpValue + tmpUnit;
}
// 处理个位数据
if (intPart[i] != '0')
buf += DigToCC(intPart[i]);
buf += "元";
return CombinUnit(buf);
}
#endregion
#region ConvertDecimal
/// <summary>
/// 小数部分的处理
/// </summary>
/// <param name="decPart">需要处理的小数部分</param>
/// <returns></returns>
private static string ConvertDecimal(string decPart)
{
string buf = "";
int i = decPart.Length;
//如果小数点后均为零
if ((decPart == "0") || (decPart == "00"))
{
return "整";
}
if (decPart.Length > 1) //2位
{
if (decPart[0] == '0') //如果角位为零0.01
{
buf = DigToCC(decPart[1]) + "分"; //此时不可能分位为零
}
else if (decPart[1] == '0')
{
buf = DigToCC(decPart[0]) + "角整";
}
else
{
buf = DigToCC(decPart[0]) + "角";
buf += DigToCC(decPart[1]) + "分";
}
}
else //1位
{
buf += DigToCC(decPart[0]) + "角整";
}
return buf;
}
#endregion
#region GetUnit
/// <summary>
/// 获取人民币中文形式的对应位置的单位标志
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private static string GetUnit(int n)
{
return RMBUnitChar[n].ToString();
}
#endregion
#region DigToCC
/// <summary>
/// 数字转换为相应的中文字符 ( Digital To Chinese Char )
/// </summary>
/// <param name="c">以字符形式存储的数字</param>
/// <returns></returns>
private static string DigToCC(char c)
{
return RMBUppercase[c - '0'].ToString();
}
#endregion
#region CheckNumberLimit
private static void CheckNumberLimit(decimal number)
{
if ((number < MinNumber) || (number > MaxNumber))
{
throw new RMBException("超出可转换的范围");
}
}
#endregion
#region CombinUnit
/// <summary>
/// 合并兆亿万词
/// </summary>
/// <param name="rmb"></param>
/// <returns></returns>
private static string CombinUnit(string rmb)
{
if (rmb.Contains("兆亿万"))
{
return rmb.Replace("兆亿万", "兆");
}
if (rmb.Contains("亿万"))
{
return rmb.Replace("亿万", "亿");
}
if (rmb.Contains("兆亿"))
{
return rmb.Replace("兆亿", "兆");
}
return rmb;
}
#endregion
#endregion
}
}
人民币转换为中文大写相关推荐
- VB 阿拉伯数字转换为中文大写数值函数
Private Function CChinese(StrEng As String) As String If Not IsNumeric(StrEng) Or StrEng Like " ...
- 将阿拉伯数字转换为中文大写数字 —— pyhton实现
将阿拉伯数字转换为中文大写数字 -- pyhton实现 在银行的日常业务中,常常需要用到将阿拉伯数字转换为中文大写数字的 功能.这次实验将编写一个程序,将用户输入的阿拉伯数字代表的金额,转换为大写数字 ...
- 将金额转换为中文大写
将金额转换为中文大写 思路 判断符号,0则直接返回 数字去掉点 00结尾的要加'整' 循环,从后面每次取一个数位上的值直到最前面, 若是非零则加上对应的数值和单位 若是零,判断上一个是否为零,是,则不 ...
- java将输入的整数转换为中文大写(查表)
java将输入的整数转换为中文大写 例如: 输入:2135: 输出:零佰零拾零万贰仟壹佰叁拾伍元 package day10;import java.util.Scanner;/*** @author ...
- 正则也很牛,把阿拉伯数字的金额转换为中文大写数字
using System; using System.Text.RegularExpressions; class Program { // 把阿拉伯数字的金额转换为中文大写数字 static ...
- 将数字转换为中文大写
将数字转换为中文大写 HTML代码: <input type="text" value="" placeholder="阿拉伯数字" ...
- Python:阿拉伯数字转换为中文大写数字(金额的读数规则)
萌萌帮班里同学做了一个python的编程作业,正好回顾一下python基础知识,以下源码和思考过程,代码全部原创. IDE:pycharm python版本:python3.7 ''' 实验目的:在银 ...
- 数字转换为中文大写(钱数)
这几天有个需求需要把数字转换为大写的钱数 public function toChineseNumber($money){ $money = round($money,2); ...
- 如何把阿拉伯数字转换为中文大写?
之前在CSDN论坛里,看有人Show了一些把中文大写转换成阿拉伯数字的程序代码,自己也用Java语言实现了程序设计,基本上能够实现十万亿以内的任何数字的转换.之前也帖出自己的实现代码. 但我个人认为, ...
最新文章
- 分片提升容量难度大,时间长,故而Vitalik提出使用BCH或者ETC作为以太坊数据层
- OpenSearchServer 1.4 RC4 发布
- C++中string、char *、char[]的转换
- php中等3秒再跳转,跳转和重定向
- LeetCode 132. 分割回文串 II(DP)
- rocketmq 消息 自定义_跟我学RocketMQ[1-4]之消息消费及支持spring
- MySQL显示连接的数据库名
- c语言统计字符个数回车字符,C语言统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入)...
- 解决办法:下列软件包有未满足的依赖关系,依赖。。。但是。。。正要被安装
- 天锐绿盾报税软件 银行软件 财务软件报错病毒解决
- oa系统怎么安装服务器配置,OA系统安装配置及维护手册-金蝶在线服务中心.DOC
- 解忧云SMS短信发送系统服务平台源码+解密完美版
- 海行Newlifest M1骨传导耳机开箱,这音质真的碉堡了
- 10个Spring Boot 优秀学习项目
- 如何用python计算函数的值域_(完整版)求函数定义域及值域方法及典型题归纳
- AMetal平台学习——初步了解篇
- 蓝桥算法提高ADV-381 分割项链题解
- python entry 文本框只能输入数字 限定数字
- 数据结构第二版(朱昌杰版)四
- YTU.2362: 愚公的遗愿
热门文章
- 经典VU仪表的混音效果工具
- AcWing1293. 夏洛克和他的女朋友
- 用淘汰的手机做家庭监控
- Generative Adversarial Text to Image Synthesis 论文翻译精校版
- 12 Roll A Ball全部代码
- 关于类似“石头、剪刀、布”游戏,需要循环判断的,判断条件设计技巧
- 用python编程、假设一年期定期利率_「定期存款利率计算」4. 假设一年期定期利率为 3.25%,计算一下需要过多少年,一万元的一年定期存款连本带息能翻番? - seo实验室...
- 看,2021年,一个普通应届生的成长之旅
- 网课搜题公众号最新可用接口含搭建教程-麦麦题
- [BZOJ1067][SCOI2007]降雨量(线段树)