c# 写一个程序,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。(请提供源码)

yunfei20082009 2008-08-29 02:45:13
c# 写一个程序,能将人民币金额从阿拉伯数字转换为大写汉字表示。例如,把1234.56转换为壹仟贰佰叁拾肆圆零伍角陆分。(请提供源码)
...全文
3461 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mzcih 2011-04-17
  • 打赏
  • 举报
回复
关注并学习。。。
rocket2010 2011-04-16
  • 打赏
  • 举报
回复
真多方法啊 都借了 谢谢
pmy6668791 2011-01-04
  • 打赏
  • 举报
回复
我也看不懂啊
智商余额不足 2010-08-09
  • 打赏
  • 举报
回复
递归算法 可以搞定
tangchengn 2010-08-07
  • 打赏
  • 举报
回复
不错,学习
lswcl123 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 koyote_love 的回复:]
去下个LTP.Common.dll
[/Quote]

是不是动软里面的那个公共类?我去找一下,我也借用
lw402365015 2010-08-07
  • 打赏
  • 举报
回复
借用、、、、
woshierbiluanzi 2010-08-07
  • 打赏
  • 举报
回复
还是看不懂啊
zhujiazhi 2009-09-25
  • 打赏
  • 举报
回复
解释器模式
chenjianyong94 2009-09-25
  • 打赏
  • 举报
回复
建议楼主,还是在前台写一个脚本对他进行判断。
zxsww2009 2009-09-25
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.VisualBasic;

namespace Price
{
public class PriceChange
{

public string[] strPrice;
public string[] strRMB;
public string strMast = string.Empty;
public PriceChange()
{
//数字的汉字读法初始化
strPrice = new string[] { "分", "角", "元", "十", "百", "仟", "万", "十", "百", "仟", "亿", "十", "百", "仟", "兆" };
strRMB = new string[]{"零","壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾"};
strMast = "万亿";
}
/// <summary>
/// 将人民币的数字形式转换成汉字
/// </summary>
/// <param name="strMoney">人民币值的数字表示(字符串)</param>
/// <returns>数字的汉字读法</returns>
public string PCget(string strMoney)
{
try
{
if (!DataChk(strMoney))
{
throw new System.ArgumentException("人民币数值类型错误!");
}
//是否已做了整数部分处理(FALSE:NO,TRUE: YES)
Boolean blnOne = false;
//数字转成汉字返回字符串初始化
string strPCget = string.Empty;
//整数与小数部分分隔符
char[] strFG = { '.' };
//将数字的整数与小数分成两组
string[] strM = strMoney.Split(strFG);
//数字向汉字转换处理
foreach (string s1 in strM)
{
//将数字中","去除
string strM2 = s1.Replace(",", "").Replace(",", "");
//求整数部分位数
int intCount = strM2.Length;
if (intCount > 13)
{
throw new System.ArgumentException("人民币数值位数超出本程序处理的范围。人民币最大值到“万亿”。");
}
//取得人民币数字单位读法的数组索引
int intC = intCount + 1;
//整数部分转换处理
if (blnOne == false)
{
for (int i = 0; i < intCount; i++)
{
blnOne = true;
//数字读法和人民币单位组合
strPCget = strPCget + strRMB[Convert.ToInt32(strM2.Substring(i, 1))] + strPrice[intC].ToString();
intC = intC - 1;
}
}
//小数部分转换处理
else
{
for (int i = 0; i < intCount; i++)
{
//数字读法取得
strPCget = strPCget + strRMB[Convert.ToInt32(strM2.Substring(i, 1))] + strPrice[intC-2].ToString();
intC = intC - 1;
}
}

}
strPCget = this.StrForm(strPCget);
return strPCget;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 格式整理
/// </summary>
/// <param name="strFrom"></param>
/// <returns></returns>
private string StrForm(string strFrom)
{
bool blHave = true;
while (blHave)
{
int intPosition = strFrom.IndexOf("零");
if (intPosition != -1)
{
if (strMast.Replace(strFrom.Substring(intPosition + 1, 1), "").Length < strMast.Length)
//&& strFrom.Substring(intPosition - 1) == "零")
{
if (strMast.Replace(strFrom.Substring(intPosition - 1, 1), "").Length < strMast.Length)
{
strFrom = strFrom.Remove(intPosition, 2);
}
else
{
strFrom = strFrom.Remove(intPosition, 1);
}
}
else
{
strFrom = strFrom.Remove(intPosition, 2);
}
}
else
{
blHave = false;
}
}
return strFrom;
}
/// <summary>
/// 是否是数字类型
/// </summary>
/// <param name="strData"></param>
/// <returns></returns>
public static Boolean DataChk(string strData)
{
double intData;
if (double.TryParse(strData.Replace(",", "").Replace(",", "").Replace(".", ""), out intData))
{
return true;
}
else
{
return false;
}
}
}
}
ericzhangbo1982111 2008-08-29
  • 打赏
  • 举报
回复
        try
{
// 以下处理整数部分
curPoint = intString.Length-1;
if (curPoint>=0 && curPoint<15)
{
k = 0;
while(curPoint>=0)
{
strBuff1 = "";
strBuff2 = "";
strBuff3 = "";
if (curPoint>=2)
{
n=int.Parse(intString.Substring(curPoint-2,3));
if (n !=0)
{
i1 = n/100; // 取佰位数值
i2 = (n-i1*100)/10; // 取拾位数值
i3 = n-i1*100-i2*10; // 取个位数值
if (i1 !=0)
{
strBuff1 = enSmallNumber[i1] + " HUNDRED ";
}
if (i2!=0)
{
if (i2==1)
{
strBuff2 = enSmallNumber[i2*10+i3] + " ";
}
else
{
strBuff2 = enLargeNumber[i2-2] + " ";
if (i3 !=0)
{
strBuff3 = enSmallNumber[i3] + " ";
}
}
}
else
{
if (i3 !=0)
{
strBuff3 = enSmallNumber[i3] + " ";
}
}
engCapital = strBuff1 + strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;
}
}
else
{
n = int.Parse(intString.Substring(0,curPoint+1));
if (n !=0)
{
i2 = n/10; // 取拾位数值
i3 = n-i2*10; // 取个位数值
if (i2!=0)
{
if (i2==1)
{
strBuff2 = enSmallNumber[i2*10+i3] + " ";
}
else
{
strBuff2 = enLargeNumber[i2-2] + " ";
if (i3 !=0)
{
strBuff3 = enSmallNumber[i3] + " ";
}
}
}
else
{
if (i3 !=0)
{
strBuff3 = enSmallNumber[i3] + " ";
}
}
engCapital = strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;
}
}

++k;
curPoint -= 3;
}
engCapital = engCapital.TrimEnd();
}


// 以下处理小数部分
strBuff2 = "";
strBuff3 = "";
n = int.Parse(decString);
if (n !=0)
{
i2 = n/10; // 取拾位数值
i3 = n-i2*10; // 取个位数值
if (i2!=0)
{
if (i2==1)
{
strBuff2 = enSmallNumber[i2*10+i3] + " ";
}
else
{
strBuff2 = enLargeNumber[i2-2] + " ";
if (i3 !=0)
{
strBuff3 = enSmallNumber[i3] + " ";
}
}
}
else
{
if (i3 !=0)
{
strBuff3 = enSmallNumber[i3] + " ";
}
}

// 将小数字串追加到整数字串后
if (engCapital.Length>0)
{
engCapital = engCapital + " AND CENTS " + strBuff2+strBuff3; // 有整数部分时
}
else
{
engCapital = "CENTS " + strBuff2 + strBuff3; // 只有小数部分时
}
}

engCapital = engCapital.TrimEnd();
return engCapital;
}
catch
{
return ""; // 含非数字字符时,返回零长字串
}
}
}
}
ericzhangbo1982111 2008-08-29
  • 打赏
  • 举报
回复



using System;

namespace Money2String
{
public class Money2String
{

private static readonly String cnNumber = "零壹贰叁肆伍陆柒捌玖";
private static readonly String cnUnit = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";

private static readonly String[] enSmallNumber = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
private static readonly String[] enLargeNumber = {"TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
private static readonly String[] enUnit = {"","THOUSAND","MILLION","BILLION","TRILLION"};


// 以下是货币金额中文大写转换方法
public static String GetCnString(String MoneyString)
{
String [] tmpString = MoneyString.Split('.');
String intString = MoneyString; // 默认为整数
String decString = ""; // 保存小数部分字串
String rmbCapital = ""; // 保存中文大写字串
int k;
int j;
int n;

if (tmpString.Length>1)
{
intString = tmpString[0]; // 取整数部分
decString = tmpString[1]; // 取小数部分
}
decString += "00";
decString = decString.Substring (0,2); // 保留两位小数位
intString += decString;

try
{
k = intString.Length -1;
if (k>0 && k<18)
{
for (int i=0;i<=k;i++)
{
j=(int)intString[i]-48;
// rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i]; // 供调试用的直接转换
n = i+1 >= k ? (int)intString[k]-48:(int)intString[i+1]-48; // 等效于 if( ){ }else{ }
if (j==0)
{
if(k-i==2 || k-i==6 || k-i==10 || k-i==14)
{
rmbCapital += cnUnit[k-i];
}
else
{
if (n != 0)
{
rmbCapital += cnNumber[j];
}
}
}
else
{
rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];
}
}

rmbCapital = rmbCapital.Replace ("兆亿万","兆");
rmbCapital = rmbCapital.Replace ("兆亿","兆");
rmbCapital = rmbCapital.Replace ("亿万","亿");
rmbCapital = rmbCapital.TrimStart('元');
rmbCapital = rmbCapital.TrimStart('零');

return rmbCapital;
}
else
{
return ""; // 超出转换范围时,返回零长字串
}
}
catch
{
return ""; // 含有非数值字符时,返回零长字串
}
}


// 以下是货币金额英文大写转换方法
public static String GetEnString(String MoneyString)
{
String [] tmpString = MoneyString.Split('.');
String intString = MoneyString; // 默认为整数
String decString = ""; // 保存小数部分字串
String engCapital = ""; // 保存英文大写字串
String strBuff1;
String strBuff2;
String strBuff3;
int curPoint;
int i1;
int i2;
int i3;
int k;
int n;

if (tmpString.Length >1)
{
intString = tmpString[0]; // 取整数部分
decString = tmpString[1]; // 取小数部分
}
decString += "00";
decString = decString.Substring (0,2); // 保留两位小数位

lovepei531 2008-08-29
  • 打赏
  • 举报
回复
public string chang(string money)
{
//将小写金额转换成大写金额
double MyNumber = Convert.ToDouble (money );
String[] MyScale = { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟" };
String[] MyBase = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String M = "";
bool isPoint = false;
if (money.IndexOf(".") != -1)
{
money = money.Remove(money.IndexOf("."), 1);
isPoint = true;
}
for (int i = money.Length; i > 0; i--)
{
int MyData = Convert.ToInt16(money[money.Length - i].ToString ());
M += MyBase[MyData];
if (isPoint==true)
{
M += MyScale[i - 1];
}
else
{
M += MyScale[i + 1];
}
}
return M;
}
darkarthur 2008-08-29
  • 打赏
  • 举报
回复
最多几位的?
koyote_love 2008-08-29
  • 打赏
  • 举报
回复
去下个LTP.Common.dll
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以教老师。购买课程后联系老师,提供单号,给你程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编的《微信小程序开发宝典》。 购课咨询qq2326321088

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧