类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
下面这个函数,其它的转换都是正确的,就是十万级别的数字,不对。比如30万元,会变成30元,就是少了个“万”字,希望高手指点一下。
public static string Chinese(string num)
{
string[] arr1={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元","点","角","分"};
string[] arr3={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
int point=num.IndexOf(.);
if(point<0)point=num.Length;
int len=arr1.Length-point-3;
string strRet="";
bool flag=true;
for(int i=0;i<num.Length;i++)
{
if(i!=point)
{
string val=arr1[i+len];
if(num[i]!=0)
{
strRet+=arr3[int.Parse(num[i].ToString())]+val;flag=true;
}
else
if(val=="亿"||val=="万"||val=="元"||val=="分")
{
if(!flag)
{
strRet=strRet.Substring(0,strRet.Length-1)+val;
flag=true;
}
}
else
{
if(flag)
{
flag=false;
strRet+="零";
}
}
}
}
return strRet.Replace("零零零","").Replace("零零","零");
}
网友回答:
这里有一个
http://community.csdn.net/Expert/topic/3278/3278898.xml?temp=.97633
public static string Chinese(string num)
{
string[] arr1={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元","点","角","分"};
string[] arr3={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
int point=num.IndexOf(.);
if(point<0)point=num.Length;
int len=arr1.Length-point-3;
string strRet="";
bool flag=true;
for(int i=0;i<num.Length;i++)
{
if(i!=point)
{
string val=arr1[i+len];
if(num[i]!=0)
{
strRet+=arr3[int.Parse(num[i].ToString())]+val;flag=true;
}
else
{
if(val=="亿"||val=="万"||val=="元"||val=="分")
{
// if(!flag)
if(flag)
{
// strRet=strRet.Substring(0,strRet.Length-1)+val;
// flag=true;
strRet+=val;
flag=false;
}
}
else
{
// if(flag)
// {
// flag=false;
strRet+="零";
flag=true;
// }
}
}
}
}
return strRet.Replace("零零亿","亿").Replace("零亿","亿").Replace("零零零万","万").Replace("零零万","万").Replace("零万","万").Replace("零零零元","元").Replace("零零元","元").Replace("零元","元").Replace("亿万","亿").Replace("零零零","零").Replace("零零","零");
// return strRet;
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<script language="jscript">
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>
</head>
<body>
<INPUT id="Digits" type="text" name="Digits" size=20>
<INPUT id="Convert" type="button" value="Convert" name="Convert" onclick="Result.value = convertCurrency(Digits.value);">
<INPUT id="Result" type="text" name="Result" size=60>
</body>
</html>
说明:
1、对一给定字符串,如:1234.55,转换成正确的中文货币描述:如:人民币壹仟贰佰叁拾四元五角五分
2、输入的字符串形式可以是以下几种:带分隔符的,如:123,456,789.00;不带分隔符的,如:123456789
3、输出的中文货币描述要符合规范,如:0.3----人民币三角;0.33----人民币三角三分;1----人民币壹元整
100----人民币壹佰元整;1001----人民币壹仟零壹元整;10000001----人民币壹仟万零壹元整;
1001001----人民币壹仟零壹万零壹元整,等
4、最大转换能到百亿
study!
将数值转换成大写
Public Function ToChineseNumber(lsNum As Variant, Optional isSign As Boolean = False) As String
Dim lsNum1 As String
Dim lsString As String
Dim LsString1 As String
Dim i As Integer
Dim j As Integer
Dim lChar As String
lsString = "分角元拾佰仟万拾佰仟亿拾佰仟万兆拾佰仟万"
LsString1 = "零壹贰叁肆伍陆染捌玖"
If Round(Cdbl("" & lsNum), 2) > 10 ^ 14 Then
MsgBox "数值太大,已超出范围!", vbOKOnly + vbExclamation
Exit Function
End If
lsNum1 = Replace(Format(Round(Cdbl("" & lsNum), 2), "#####.00"), ".", "")
ToChineseNumber = ""
j = 0
For i = Len(lsNum1) To 1 Step -1
j = j + 1
lChar = Mid(lsNum1, i, 1)
ToChineseNumber = Mid(LsString1, Val(lChar) + 1, 1) & Mid(lsString, j, 1) & ToChineseNumber
Next i
ToChineseNumber = IIf(isSign, "$", "") & ToChineseNumber
End Function
这个是我同事写的一个数字转文字的人民币转换函数,用vb写的,大家稍作修改就变成c#的了。
转换范围为,值不超出10^14都可以。!
比如:
ToChineseNumber(123456789.1234)
壹亿贰仟叁佰肆拾伍万陆仟染佰捌拾玖元壹角贰分
ToChineseNumber(123456789.1234,true)
$壹亿贰仟叁佰肆拾伍万陆仟染佰捌拾玖元壹角贰分
如果把函数中的"$"改为"人民币" 那么
ToChineseNumber(123456789.1234,true)
人民币壹亿贰仟叁佰肆拾伍万陆仟染佰捌拾玖元壹角贰分
其中 Round(Cdbl("" & lsNum), 2)
cdbl("" & lsum)把 lsum转换成双精度的数
Round函数:对cdbl("" & lsum)的结果保留两位小数。这两个函数都是vb自身的。