请你把一组数转化成人民币大写,例如1234.56转化成壹千贰百三拾四元五角六分
求教解决办法,方法越简练愈好
求教解决办法,方法越简练愈好
解决方案 »
- 向数据库中添加数据得问题?求救高人?
- VS2008中拖动无边框窗体的问题
- 利用c#模拟实现word的分栏效果
- new语句在c#中是什么格式?
- c# Winform 里面有什么控件可以对xml文件进行xsl转换?
- VS2005(C#)的TIMER控件怎么显示不出来啊!
- 这个问题上次问过了,没有得到很满意的答案,再问。程序的数据库怎样安装到目标机上。安装的时候执行脚本?程序开始时用配置程序手工配置
- dateTimePicker的时间录入到数据库
- 浪潮通信的情况
- 还是刚才那条语句 编译不能通过呀
- c#(winfrom)中如何选择panel控件中的pictruebox控件
- 【急切求助】如何在“西祠论坛”自动发帖、回帖(请大家讨论)?
namespace Skyiv.Util
{
using System.Text;
class Test
{
static void Main()
{
for (;;)
{
System.Console.Write("金额: ");
string s = System.Console.ReadLine();
decimal m;
try { m = decimal.Parse(s); }
catch { break; }
System.Console.WriteLine("大写: " + new Money(m));
}
}
}
// 该类重载的 ToString() 方法返回的是大写金额字符串
class Money
{
public string Yuan = "元"; // “元”,可以改为“圆”、“卢布”之类
public string Jiao = "角"; // “角”,可以改为“拾”
public string Fen = "分"; // “分”,可以改为“美分”之类
static string Digit = "零壹贰叁肆伍陆柒捌玖"; // 大写数字
bool isAllZero = true; // 片段内是否全零
bool isPreZero = true; // 低一位数字是否是零
bool Overflow = false; // 溢出标志
long money100; // 金额*100,即以“分”为单位的金额
long value; // money100的绝对值
StringBuilder sb = new StringBuilder(); // 大写金额字符串,逆序
// 只读属性: "零元"
public string ZeroString
{
get { return Digit[0] + Yuan; }
}
// 构造函数
public Money(decimal money)
{
try { money100 = (long)(money * 100m); }
catch { Overflow = true; }
if (money100 == long.MinValue) Overflow = true;
}
// 重载 ToString() 方法,返回大写金额字符串
public override string ToString()
{
if (Overflow) return "金额超出范围";
if (money100 == 0) return ZeroString;
string [] Unit = { Yuan, "万", "亿", "万", "亿亿" };
value = System.Math.Abs(money100);
ParseSection(true);
for (int i = 0; i < Unit.Length && value > 0; i++)
{
if (isPreZero && !isAllZero) sb.Append(Digit[0]);
if (i == 4 && sb.ToString().EndsWith(Unit[2]))
sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);
sb.Append(Unit[i]);
ParseSection(false);
if ((i % 2) == 1 && isAllZero)
sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);
}
if (money100 < 0) sb.Append("负");
return Reverse();
}
// 解析“片段”: “角分(2位)”或“万以内的一段(4位)”
void ParseSection(bool isJiaoFen)
{
string [] Unit = isJiaoFen ?
new string [] { Fen, Jiao } :
new string [] { "", "拾", "佰", "仟" };
isAllZero = true;
for (int i = 0; i < Unit.Length && value > 0; i++)
{
int d = (int)(value % 10);
if (d != 0)
{
if (isPreZero && !isAllZero) sb.Append(Digit[0]);
sb.AppendFormat("{0}{1}", Unit[i], Digit[d]);
isAllZero = false;
}
isPreZero = (d == 0);
value /= 10;
}
}
// 反转字符串
string Reverse()
{
StringBuilder sbReversed = new StringBuilder();
for (int i = sb.Length - 1; i >= 0; i--)
sbReversed.Append(sb[i]);
return sbReversed.ToString();
}
}
}
见:http://topic.csdn.net/u/20080125/09/04c65875-4f50-42cd-bd63-d7b1429e42e1.html(31楼)using System;
using System.Text.RegularExpressions;class Program
{
static void Main()
{
string s = 1234.56.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
Console.WriteLine(d + "\n" + Regex.Replace(d, ".", delegate(Match m) { return "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString(); }));
}
}
{ string m_1, m_2, m_3, m_4, m_5, m_6, m_7, m_8, m_9;
//m_1
m_1 = strIn;
string numNum = "0123456789.";
string numChina = "零壹贰叁肆伍陆柒捌玖点";
string numChinaWeigh = "个拾佰仟万拾佰仟亿拾佰仟万拾佰仟亿";
//m_1.Format("%.2f", atof(m_1));
m_1 = (float.Parse(strIn)).ToString("f2");
m_2 = m_1;
m_3 = m_4 = "";
//m_2:1234-> 壹贰叁肆
for (int i = 0; i < 11; i++)
{
//m_2=m_2.Replace(numNum.Mid(i, 1), numChina.Mid(i * 2, 2));
m_2 = m_2.Replace(numNum.Substring(i, 1), numChina.Substring(i, 1));
} //m_3:佰拾万仟佰拾个
int iLen = m_1.Length;
if (iLen > 16)
{
m_8 = m_9 = "越界错!";
return "";
}
if (m_1.IndexOf('.') > 0)
iLen = m_1.IndexOf('.'); for (int j = iLen; j >= 1; j--)
{
m_3 += numChinaWeigh.Substring(j - 1, 1);
}
//m_4:2行+3行 for (int i = 0; i < m_3.Length; i++)
{
m_4 += m_2.Substring(i, 1) + m_3.Substring(i, 1);
}
//m_5:4行去"0"后拾佰仟 m_5 = m_4;
m_5 = m_5.Replace("零拾", "零");
m_5 = m_5.Replace("零佰", "零");
m_5 = m_5.Replace("零仟", "零");
//m_6:00-> 0,000-> 0 m_6 = m_5;
for (int i = 0; i < iLen; i++)
m_6 = m_6.Replace("零零", "零"); //m_7:6行去亿,万,个位"0"
m_7 = m_6;
m_7 = m_7.Replace("亿零万零", "亿零");
m_7 = m_7.Replace("亿零万", "亿零");
m_7 = m_7.Replace("零亿", "亿");
m_7 = m_7.Replace("零万", "万");
if (m_7.Length > 2)
m_7 = m_7.Replace("零个", "个"); //m_8:7行+2行小数-> 数目
m_8 = m_7;
m_8 = m_8.Replace("个", "");
if (m_2.Substring(m_2.Length - 3, 3) != "点零零")
m_8 += m_2.Substring(m_2.Length - 3, 3); //m_9:7行+2行小数-> 价格
m_9 = m_7;
m_9 = m_9.Replace("个", "圆");
if (m_2.Substring(m_2.Length - 3, 3) != "点零零")
{
m_9 += m_2.Substring(m_2.Length - 2, 2);
m_9 = m_9.Insert(m_9.Length - 1, "角");
m_9 += "分";
}
else m_9 += "整";
if (m_9 != "零圆整")
m_9 = m_9.Replace("零圆", "");
m_9 = m_9.Replace("零分", "整");
if (strType == "数量")
return m_8;
else
return m_9; }
// 最大转化金额 9999999999999999.99 (16位整数位,2位小数位)
// 方法返回值 转换成功则返回非零长字串,否则返回零长字串// 静态英文转换方法 String GetEnString(String MoneyString)
// 最大转化金额 999999999999999.99 (15位整数位,2位小数位)
// 方法返回值 转换成功则返回非零长字串,否则返回零长字串
<script language="javascript" type="text/javascript">
function convertCurrency(currencyDigits) {
// Constants:
var MAXIMUM_NUMBER = 99999999999.99;
// Predefine the radix characters and currency symbols for output:
var CN_ZERO = "零";
var CN_ONE = "壹";
var CN_TWO = "贰";
var CN_THREE = "叁";
var CN_FOUR = "肆";
var CN_FIVE = "伍";
var CN_SIX = "陆";
var CN_SEVEN = "柒";
var CN_EIGHT = "捌";
var CN_NINE = "玖";
var CN_TEN = "拾";
var CN_HUNDRED = "佰";
var CN_THOUSAND = "仟";
var CN_TEN_THOUSAND = "万";
var CN_HUNDRED_MILLION = "亿";
var CN_SYMBOL = "人民币";
var CN_DOLLAR = "元";
var CN_TEN_CENT = "角";
var CN_CENT = "分";
var CN_INTEGER = "整";// Variables:
var integral; // Represent integral part of digit number.
var decimal; // Represent decimal part of digit number.
var outputCharacters; // The output result.
var parts;
var digits, radices, bigRadices, decimals;
var zeroCount;
var i, p, d;
var quotient, modulus;// Validate input string:
currencyDigits = currencyDigits.toString();
if (currencyDigits == "") {
alert("Empty input!");
return "";
}
if (currencyDigits.match(/[^,.\d]/) != null) {
alert("Invalid characters in the input string!");
return "";
}
if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {
alert("Illegal format of digit number!");
return "";
}// Normalize the format of input digits:
currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.
currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning.
// Assert the number is not greater than the maximum number.
if (Number(currencyDigits) > MAXIMUM_NUMBER) {
alert("Too large a number to convert!");
return "";
}// Process the coversion from currency digits to characters:
// Separate integral and decimal parts before processing coversion:
parts = currencyDigits.split(".");
if (parts.length > 1) {
integral = parts[0];
decimal = parts[1];
// Cut down redundant decimal digits that are after the second.
decimal = decimal.substr(0, 2);
}
else {
integral = parts[0];
decimal = "";
}
// Prepare the characters corresponding to the digits:
digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);
radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);
bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);
decimals = new Array(CN_TEN_CENT, CN_CENT);
// Start processing:
outputCharacters = "";
// Process integral part if it is larger than 0:
if (Number(integral) > 0) {
zeroCount = 0;
for (i = 0; i < integral.length; i++) {
p = integral.length - i - 1;
d = integral.substr(i, 1);
quotient = p / 4;
modulus = p % 4;
if (d == "0") {
zeroCount++;
}
else {
if (zeroCount > 0){
outputCharacters += digits[0];
}
zeroCount = 0;
outputCharacters += digits[Number(d)] + radices[modulus];
}
if (modulus == 0 && zeroCount < 4) {
outputCharacters += bigRadices[quotient];
}
}
outputCharacters += CN_DOLLAR;
}
// Process decimal part if there is:
if (decimal != "") {
for (i = 0; i < decimal.length; i++) {
d = decimal.substr(i, 1);
if (d != "0") {
outputCharacters += digits[Number(d)] + decimals[i];
}
}
}
// Confirm and return the final output string:
if (outputCharacters == "") {
outputCharacters = CN_ZERO + CN_DOLLAR;
}
if (decimal == "") {
outputCharacters += CN_INTEGER;
}
outputCharacters = CN_SYMBOL + outputCharacters;
return outputCharacters;
}
</script>
<p>数字金额: <input id="Digits" name="Digits" /> <input id="Convert" onclick="Result.value = convertCurrency(Digits.value);" type="button" name="Convert" value="转 换" /> </p>
<p>大写金额: <input id="Result" size="60" name="Result" /> </p>
他们那个贴子的"牛"也好牛的.(37L)
http://topic.csdn.net/u/20080125/09/04c65875-4f50-42cd-bd63-d7b1429e42e1.html确实不错,这贴子.
--小写转中文大写
CREATE FUNCTION [dbo].[f_num_chn] (@num numeric(14,2))
RETURNS varchar(100)
AS
BEGIN
DECLARE @n_data VARCHAR(20),@c_data VARCHAR(100),@n_str VARCHAR(10),@i int SET @n_data=RIGHT(SPACE(14)+CAST(CAST(ABS(@num*100) AS bigint) AS varchar(20)),14)
SET @c_data=''
SET @i=1
WHILE @i<=14
BEGIN
SET @n_str=SUBSTRING(@n_data,@i,1)
IF @n_str<>' '
BEGIN
IF not ((SUBSTRING(@n_data,@i,2)='00') or
((@n_str='0') and ((@i=4) or (@i=8) or (@i=12) or (@i=14))))
SET @c_data=@c_data+SUBSTRING('零壹贰叁肆伍陆柒捌玖',CAST(@n_str AS int)+1,1)
IF not ((@n_str='0') and (@i<>4) and (@i<>8) and (@i<>12))
SET @c_data=@c_data+SUBSTRING('仟佰拾亿仟佰拾万仟佰拾圆角分',@i,1)
IF SUBSTRING(@c_data,LEN(@c_data)-1,2)='亿万'
SET @c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)
END
SET @i=@i+1
END
IF @num<0
SET @c_data='(负数)'+@c_data
IF @num=0
SET @c_data='零圆'
IF @n_str='0'
SET @c_data=@c_data+'整'
RETURN(@c_data)
END
<head>
<title></title>
<script language="javascript">
function ChangeToUpper()
{
var upperArray=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var unitArray=new Array("分","角","圆","拾","佰","仟","万");
var num = document.all.txt1.value;
num+=".00";
num=num.substr(0,num.indexOf(".")+3);
num=num.replace(".","");
var numAfter="";
for(var i=0;i<num.length;i++)
{
if(num.substr(i,1) !=".")
numAfter+=upperArray[num.substr(i,1)]+unitArray[num.length-i-1];
}
alert(numAfter);
}
</script>
<head>
<body>
<input id="txt1" type="textbox" />
<input type="button" width="50px" width="50px" value="转换" onclick="ChangeToUpper()"/>
</body>
</html>
<head>
<title></title>
<script language="javascript">
function ChangeToUpper()
{
var upperArray=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var unitArray=new Array("分","角","圆","拾","佰","仟","万");
var num = document.all.txt1.value;
num+=".00";
num=num.substr(0,num.indexOf(".")+3);
num=num.replace(".","");
var numAfter="";
for(var i=0;i<num.length;i++)
{
numAfter+=upperArray[num.substr(i,1)]+unitArray[num.length-i-1];
}
alert(numAfter);
}
</script>
<head>
<body>
<input id="txt1" type="textbox" />
<input type="button" width="50px" width="50px" value="转换" onclick="ChangeToUpper()"/>
</body>
</html>
#include <string.h>
////////////////////////////
///并为加上数据格式验证 假设输入的数字都是正确的
///
///需要添加或修改单位 修改数组即可wchar_t *number[] = {L"零",L"壹",L"贰",L"叁",L"肆",L"伍",L"陆",L"柒",L"捌",L"玖"};
wchar_t *funit[] = {L"元",L"拾",L"佰",L"仟",L"万",L"拾万",L"佰万",L"仟万",L"亿",L"拾亿",L"佰亿",L"仟亿",L"万亿",L"拾万亿",L"佰万亿",L"仟万亿"};
wchar_t *bunit[] = {L"整",L"角",L"分"};#define RETBUFFER 1024 ///缓存区大小int wmain(int argc, wchar_t* argv[])
{
wchar_t* po = wcsstr(argv[1],L"."); ///是否包含小数点
if(po!=NULL){ //包含
po[0]=NULL;
po++; //断掉字符串 逻辑上等同于小数点以后的数字字符串
} wchar_t tmp[RETBUFFER] = {0}; //临时字符串
int len = wcslen(argv[1]); //整数位长度
for(int i=0;i<len;i++){///循环测试每一个值 把数字转换成中文 复制到临时字符串
wcscat_s(tmp,1024,number[argv[1][i]-L'0']);
if(argv[1][i]-L'0'==0 || len-(i+1)==0)continue; //如果等于0 则没有后续单位
wcscat_s(tmp,RETBUFFER,funit[len-(i+1)]);
}
wcscat_s(tmp,RETBUFFER,funit[0]); //添加元
if(po==NULL)
wcscat_s(tmp,RETBUFFER,bunit[0]); //添加 整
else{
len = wcslen(po);
for(int i=0;i<len;i++){///小数点后的
int value = po[i]-L'0';
wcscat_s(tmp,RETBUFFER,number[value]);
if(value==0)continue;
wcscat_s(tmp,RETBUFFER,bunit[i+1]);
}
}
wchar_t ret[RETBUFFER] = {0};
int j=0;
for(int i=0;i<(int)wcslen(tmp);i++){ ///00 0元略过
if(tmp[i]==number[0][0] && (tmp[i+1]==number[0][0] || tmp[i+1]==funit[0][0]))continue; ret[j++]=tmp[i];
} return 0;
}
#include <string.h>wchar_t *number[] = {L"零",L"壹",L"贰",L"叁",L"肆",L"伍",L"陆",L"柒",L"捌",L"玖"};wchar_t *unit[] = {L"仟",L"佰",L"拾"};
wchar_t *dunit[] = {L"元",L"万",L"亿",L"兆"};
wchar_t *funit[] = {L"角",L"分"};
#define RETBUFFER 1024 ///缓存区大小int wmain(int argc, wchar_t* argvs[])
{
wchar_t input[100];
wcscpy_s(input,100,L"11110001000.12");
wchar_t* decp = wcsstr(input,L".");
if(decp!=NULL){ //包含
decp[0]=NULL;
decp++;
} wchar_t tmp[RETBUFFER] = {0}; int len = wcslen(input);
int value = len%4;
int count = (len+3)/4 -1; for(wchar_t* p=input;p[0]!=NULL;p+=value,value=4)
{
if(value==0)continue;
int sum =0;
for(int i=0;i<value;i++)
{
int num = p[i]-L'0';
sum+=num;
wcscat_s(tmp,RETBUFFER,number[num]);
if(num==0 || 4-value+i==3)continue;
wcscat_s(tmp,RETBUFFER,unit[4-value+i]);
}
if(sum!=0 || count==0)wcscat_s(tmp,RETBUFFER,dunit[count--]);
} if(decp==NULL)
wcscat_s(tmp,RETBUFFER,L"整");
else
{
for(int i=0;i<(int)wcslen(decp);i++)
{
wcscat_s(tmp,RETBUFFER,number[decp[i]-L'0']);
if(decp[i]-L'0'==0)continue;
wcscat_s(tmp,RETBUFFER,funit[i]);
}
}
wchar_t ret[RETBUFFER] = {0};
int j = 0;
for(int i=0;i<(int)wcslen(tmp);i++)
{
if(tmp[i]==number[0][0])
{
if(tmp[i+1]==number[0][0])
continue;
for(int k=0;k<sizeof(dunit)/sizeof(dunit[0]);k++)
{
if(tmp[i+1]==dunit[k][0])
{
i++;
break;
}
} }
ret[j++] = tmp[i];
} return 0;
}