初学c# 请多指教
废话没有 直接上代码
//将阿拉伯数字转成大写中文
public static string num2String(double num)
{
if (num >= 1000000000)
{
Console.WriteLine("num is too large");
return "";
}
string result = "";
string front = "";//整数部分
string back = "";//小数部分
string[] num_strs = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };//大写数字数组
string[] num_dw = { "", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿" };//大写数字单位数组
string[] money_dw = { "分", "角", "圆" };//人民币单位数组
string str_num = num.ToString();
string[] strs = str_num.Split('.');
if (num < 0)//负数的话
{
result += "负";
str_num = str_num.Replace("-", "");
}
int num_f = 0;//整数部分
int num_back = 0;//小数部分
if (strs.Length == 2)
{
front = strs[0];
back = strs[1];
num_f = Convert.ToInt32(front);
num_back = Convert.ToInt32(back);
}
else
{
front = num.ToString();
num_f = Convert.ToInt32(front);
}
for (int i = 8; i >= 0; i--)//从八个0 就是亿开始
{
string cs = "1";//除数
for (int j = 1; j <= i; j++)//除数补零
{
cs += "0";
}
int num_cs = Convert.ToInt32(cs);
int s = num_f / num_cs;//商
if (s == 0)//商为0意味着除数没有这么大 直接跳到下一次循环
{
continue;
}
else
{
result += num_strs[s] + num_dw[i];//针对这一位生成结果
num_f = num_f % num_cs;//整数部分重新赋值成余数继续循环
}
}
result += money_dw[2];//整数位添加货币单位
//以下针对结果进行处理使之合理化
//循环加零 如2003 不处理将是两千三圆 处理后为两千零三圆
//算法为在数字单位数组中从佰开始遍历(第三位)找结果字符串中是否含有它的上一位 如没有则需在此单位的下一位置加入一个“零”
for (int i = 2; i < num_dw.Length; i++)
{
if (result.IndexOf(num_dw[i]) == -1)
{
continue;
}
if (result.IndexOf(num_dw[i - 1]) == -1)
{
result = result.Insert(result.IndexOf(num_dw[i]) + 1, "零");
}
}
//以下处理多出的“万” 如出现二十万两万。。。应为二十二万
//算法为保留最后出现的万字 其他去掉
string[] strs1 = result.Split('万');
result = "";
//以万字拆分字符串后 遍历结果数组 在结果数组的前一位加上万字
for (int i = 0; i < strs1.Length; i++)
{
result += strs1[i];
if (i == strs1.Length - 2)
{
result += "万";
}
}
//以下处理录入0时 直接生成零圆
if (result == money_dw[2])
{
result = "零" + money_dw[2];
}
//小数部分处理
if (back != null && back != "")
{
if (back.Length > 2)//只截取前两位 到分 在小的无货币单位支持 没有意义
{
back = back.Substring(0, 2);
}
num_back = Convert.ToInt32(back);
int s = num_back / 10;
int ys = num_back % 10;
if (s == 0)//只有角一位
{
result += (num_strs[ys] + money_dw[1]);
}
else
{
result += (num_strs[s] + money_dw[1] + num_strs[ys] + money_dw[0]);
}
}
return result;
}
分享到:
相关推荐
使用C#实现阿拉伯数字到大写中文的转换
1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...
一个将阿拉伯数字转换为大写的小程序,希望对初学者有用.
用C#编写的数字转换成中文大写的窗体程序
环境:vs2005 C# 功能:阿拉伯数字转换为中文大写数字
可将任意阿拉伯数字金额等转换成汉字大写“壹、贰”
唯一功能: 将阿拉伯数字转为中文大写数字。 最大支持32为整数部分转换(兆级)。 小数部分直译。 (转换使用上数计数规则)
下载压缩包后,先解压时,再用vs。net2003打开 下载压缩包后,先解压时,再用vs。net2003打开 下载压缩包后,先解压时,再用vs。net2003打开 下载压缩包后,先解压时,再用vs。net2003打开
网上很多数字金额转人民币大写的代码也很好用,但是一直没有看到中文大写金额转数字的算法,这个是我自己敲的,也运行了单元测试,应该可用的,大家拿起看看吧,有问题欢迎留言!
C#商品金额大小写转换,根据输入的阿拉伯数字,转化为中文的汉字,并带上单位输出
将阿拉伯数字表示的货币数值转换成以中文大写表示的货币数值。可以支持十万元级别和百万元级别。
使用C#编写的数字大小写转换器,包含整个项目的源程序,能够实现输入阿拉伯数字,输出壹贰叁肆等大写文字的功能。
有没有遇到过不会人民币大写的情况? 此软件把阿拉伯数字转换为人民币大写。 需安装.net环境。
8、支持阿拉伯数字/小数基本单字单位的识别,例如2012年,1.75米,5吨,120斤,38.6℃。9、自动英文圆角/半角,大写/小写转换。10、同义词匹配:自动中文/英文同义词追加. (需要在 friso.ini 中开启 friso.add_syn ...