C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换
/// <summary>
/// 本类实现阿拉伯数字到大写中文的转换
/// 该类没有对非法数字进行判别,请事先自己判断数字是否合法
/// </summary>
public class ChineseNum
{
//小写转大写
public static string GetChineseNum(string p_num)
{
ChineseNum cn = new ChineseNum();
return cn.NumToChn(p_num);
}
//小写金额转大写金额
public static string GetUpperMoney(double p_Money)
{
ChineseNum cn = new ChineseNum();
return cn.GetMoneyChinese(p_Money);
}
//转换数字
private char CharToNum(char x)
{
string stringChnNames = "零一二三四五六七八九";
string stringNumNames = "0123456789";
return stringChnNames[stringNumNames.IndexOf(x)];
}
//转换万以下整数
private string WanStrToInt(string x)
{
string[] stringArrayLevelNames = new string[4] { "", "十", "百", "千" };
string ret = "";
int i;
for (i = x.Length - 1; i >= 0; i--)
if (x[i] == '0')
{
ret = CharToNum(x[i]) + ret;
}
else
{
ret = CharToNum(x[i]) + stringArrayLevelNames[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 StrToInt(string x)
{
int len = x.Length;
string ret, temp;
if (len <= 4)
{
ret = WanStrToInt(x);
}
else if (len <= 8)
{
ret = WanStrToInt(x.Substring(0, len - 4)) + "万";
temp = WanStrToInt(x.Substring(len - 4, 4));
if (temp.IndexOf("千") == -1 && temp != "")
ret += "零" + temp;
else
ret += temp;
}
else
{
ret = WanStrToInt(x.Substring(0, len - 8)) + "亿";
temp = WanStrToInt(x.Substring(len - 8, 4));
if (temp.IndexOf("千") == -1 && temp != "")
{
ret += "零" + temp;
}
else
{
ret += temp;
}
ret += "万";
temp = WanStrToInt(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 StrToDouble(string x)
{
string ret = "";
for (int i = 0; i < x.Length; i++)
{
ret += CharToNum(x[i]);
}
return ret;
}
private 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 += StrToInt(x.Substring(0, x.IndexOf("."))) + "点" + StrToDouble(x.Substring(x.IndexOf(".") + 1));
}
else
{
ret += StrToInt(x);
}
return ret;
}
//金额转换
private string GetMoneyChinese(Double Money)
{
int i;
string mstrSource;
if (Money == 0)
{
return "";
}
mstrSource = Money.ToString("#0.00");
i = mstrSource.IndexOf(".");
if (i > 0) { mstrSource = mstrSource.Replace(".", ""); }
if (mstrSource.Substring(0, 1) == "0") { mstrSource = mstrSource.Remove(0, 1); }
mstrSource = NumstrToChinese(mstrSource);
if (mstrSource.Length == 0) { return ""; }
//负
if (Money < 0)
{
mstrSource = "负" + mstrSource;
}
mstrSource = mstrSource.Replace("0", "零");
mstrSource = mstrSource.Replace("1", "壹");
mstrSource = mstrSource.Replace("2", "贰");
mstrSource = mstrSource.Replace("3", "叁");
mstrSource = mstrSource.Replace("4", "肆");
mstrSource = mstrSource.Replace("5", "伍");
mstrSource = mstrSource.Replace("6", "陆");
mstrSource = mstrSource.Replace("7", "柒");
mstrSource = mstrSource.Replace("8", "捌");
mstrSource = mstrSource.Replace("9", "玖");
mstrSource = mstrSource.Replace("M", "亿");
mstrSource = mstrSource.Replace("W", "万");
mstrSource = mstrSource.Replace("S", "仟");
mstrSource = mstrSource.Replace("H", "佰");
mstrSource = mstrSource.Replace("T", "拾");
mstrSource = mstrSource.Replace("Y", "圆");
mstrSource = mstrSource.Replace("J", "角");
mstrSource = mstrSource.Replace("F", "分");
if (mstrSource.Substring(mstrSource.Length - 1, 1) != "分")
{
mstrSource = mstrSource + "整";
}
return mstrSource;
}
//金额转换
private string NumstrToChinese(string numstr)
{
int i;
int j;
string mstrChar;
string[] mstrFlag = new string[4];
string mstrReturn = "";
bool mblnAddzero = false;
mstrFlag[0] = "";
mstrFlag[1] = "T";
mstrFlag[2] = "H";
mstrFlag[3] = "S";
for (i = 1; i <= numstr.Length; i++)
{
j = numstr.Length - i;
mstrChar = numstr.Substring(i - 1, 1);
if (mstrChar != "0" && j > 1) { mstrReturn = mstrReturn + mstrChar + mstrFlag[(j - 2) % 4]; }
if (mstrChar == "0" && mblnAddzero == false)
{
mstrReturn = mstrReturn + "0";
mblnAddzero = true;
}
if (j == 14)
{
if (mstrReturn.Substring(mstrReturn.Length - 1) == "0")
{ mstrReturn = mstrReturn.Substring(0, mstrReturn.Length - 1) + "W0"; }
else
{ mstrReturn = mstrReturn + "W"; }
}
if (j == 2)
{
if (mstrReturn.Substring(mstrReturn.Length - 1, 1) == "0")
{ mstrReturn = mstrReturn.Substring(0, mstrReturn.Length - 1) + "Y0"; }
else
{ mstrReturn = mstrReturn + "Y"; }
//元
}
if (j == 6)
{
if (mstrReturn.Length > 2)
{
if (mstrReturn.Substring(mstrReturn.Length - 2) != "M0")
{
if (mstrReturn.Substring(mstrReturn.Length - 1) == "0")
{ mstrReturn = mstrReturn.Substring(0, mstrReturn.Length - 1) + "W0"; }
else
{ mstrReturn = mstrReturn + "W"; }
}
}
else
{
if (mstrReturn.Substring(mstrReturn.Length - 1) == "0")
{ mstrReturn = mstrReturn.Substring(0, mstrReturn.Length - 1) + "W0"; }
else
{ mstrReturn = mstrReturn + "W"; }
}
}
if (j == 10)
{
if (mstrReturn.Substring(mstrReturn.Length - 1) == "0")
{ mstrReturn = mstrReturn.Substring(0, mstrReturn.Length - 1) + "M0"; }
else
{ mstrReturn = mstrReturn + "M"; }
}
if (j == 0 && mstrChar != "0") { mstrReturn = mstrReturn + mstrChar + "F"; }
if (j == 1 && mstrChar != "0") { mstrReturn = mstrReturn + mstrChar + "J"; }
if (mstrChar != "0") { mblnAddzero = false; }
}
if (mstrReturn.Substring(0, 1) == "1" && mstrReturn.Substring(1, 1) == mstrFlag[1]) { mstrReturn = mstrReturn.Substring(1); }
if (mstrReturn.Substring(mstrReturn.Length - 1, 1) == "0") { mstrReturn = mstrReturn.Substring(0, mstrReturn.Length - 1); }
if (mstrReturn.Substring(0, 1) == "0") { mstrReturn = mstrReturn.Substring(1); }
if (mstrReturn.Substring(mstrReturn.Length - 1, 1) == "M" || mstrReturn.Substring(mstrReturn.Length - 1, 1) == "W" || mstrReturn.Substring(mstrReturn.Length - 1, 1) == "S" || mstrReturn.Substring(mstrReturn.Length - 1, 1) == "H" || mstrReturn.Substring(mstrReturn.Length - 1, 1) == "T") { mstrReturn = mstrReturn + "Y"; }
return mstrReturn;
}
}
C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换的更多相关文章
- C#:小写金额转换为大写
#region 小写金额转换为大写 public static string CurrToChnNum(double Currnum) { string sResult = ""; ...
- SQL标量值函数:小写金额转大写
我们日常开发业务系统中,作为统计报表中,特别是财务报表,显示中文金额经常遇到. 转换大小写的方法有很多,以下是从数据库函数方面解决这一问题. 效果如图: 调用:SELECT dbo.[Fn_Conve ...
- jsp页面输入小写金额转大写
<script> function chineseNumber(num){ if (isNaN(num) || num > Math.pow(10, 12)) return &quo ...
- php小写金额转大写
public static function amountInWords($num) { if (!is_numeric($num) || empty($num)) ...
- js 小写金额转大写
function smalltoBIG(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ...
- js 人民币小写金额转换为大写
function smalltoBIG(n) { var fraction = ['角', '分']; var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ...
- JS将人民币小写金额转换为大写
/** 数字金额大写转换(可以处理整数,小数,负数) */ function smalltoBIG(n) { var fraction = ['角', '分']; var digit = ['零', ...
- java将小写金额转换为大写的工具类
public class Tool { private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分"; ...
- 【转】Delphi货币类型转中文大写金额
unit TU2.Helper.Currency; interface ): string; ): string; implementation uses System.SysUtils, Syste ...
随机推荐
- FPGA在其他领域的应用(三)
广播领域: 专业的A/V(音频/视频),和演播室行业正在经历着激动人心的变化,例如,UHD/8K (超高清)视频.多平台内容交付.IP网络传输和云计算.2016里约奥运会使用4K分辨率视频播放,而日本 ...
- BZOJ-4915-简单的数字题
Description 对任意的四个不同的正整数组成的集合A={a_1,a_2,a_3,a_4 },记S_A=a_1+a_2+a_3+a_4,设n_A是满足a_i+a_j (1 ≤i<j≤4)| ...
- 数据迁移过程中hive sql调优
本文记录的是,在数据处理过程中,遇到了一个sql执行很慢,对一些大型的hive表还会出现OOM,一步一步通过参数的设置和sql优化,将其调优的过程. 先上sql ) t where t.num =1) ...
- 基于HTML5和WebGL的3D网络拓扑结构图
现在,3D模型已经用于各种不同的领域.在医疗行业使用它们制作器官的精确模型:电影行业将它们用于活动的人物.物体以及现实电影:视频游戏产业将它们作为计算机与视频游戏中的资源:在科学领域将它们作为化合物的 ...
- openwrt下 samba设置
1. 增加用户: 可以手工直接修改 /etc/passwd, 增加一行: samba:x:102:100::/home/samba:#也可命令如下opkg updateopkg install sha ...
- jsp与servlet联合处理
通过model1 或者说 model2 我们知道的mvc 的分层思想, 在model1 中jsp 通负责显示,有负责控制逻辑结构, 那么怎么做呢,看下面的请求过程. <?xml version= ...
- Centos 7.0 execute yum update ——File "/usr/libexec/urlgrabber-ext-down", line 75, in <module> 解决方式
[打开这个文件:/usr/lib/python2.7/site-packages/urlgrabber/grabber.py找到elif errcode in (42, 55,56) 用 eli ...
- 关于keyTyped
蠢了,重写keyTyped方法时候拿keyCode去做比较....记一下....VK_UNDEFiEND.......
- LINUX 笔记-条件测试
格式:test condition 文件测试状态 -d 目录 -s 文件长度大于0,非空 -f 正规文件 -w 可写 -l 符号链接 -u 文件有suid位设置 -r 可读 -x 可执行 字符串测试 ...
- ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块
之前的My Blog提供了列表的展示和文章显示功能,但是所有数据仍然只能通过数据库录入,为了完成最初的角色“作者”的用例,本章将介绍如何使用“Area”实现My Blog的管理功能. 根据功能分离代码 ...