总算改好了。跟人家的思路一样,代码则完全C#风格的改编比较辛苦。
/// <summary>
///汉字中文大写货币转换函数类
/// </summary>
public static string HZHB(decimal mymoney )
{
string hzhbmoney = "", intString, decString = "";
Array tmpString, cnNumber, cnUnit;
string DXHZ1 = "零,壹,贰,叁,肆,伍,陆,柒,捌,玖,";
string DXHZ2 = "分,角,元,拾,佰,仟,万,拾,佰,仟,亿,拾,佰,仟,兆,拾,佰,仟,";
cnNumber = DXHZ1.Split(',');
cnUnit = DXHZ2.Split(',');
intString = mymoney.ToString();
tmpString = intString.Split('.');
if (tmpString.GetUpperBound(0) > 0)
{
intString = tmpString.GetValue(0).ToString();
decString = tmpString.GetValue(1).ToString();
}
//intString = intString & Left(decString & "00", 2)
decString = decString + "00";
intString = intString + decString.Substring(0,2);
int i, k, j;
k = intString.Length-1;
if ( k > 16) //超出转换范围,返回原值
{
hzhbmoney = mymoney.ToString();
}
else if (mymoney != 0)
{
for (i = 0; i < k+1; i++)
{
j = int.Parse(intString.Substring(i, 1));
hzhbmoney = hzhbmoney + cnNumber.GetValue(j).ToString() + cnUnit.GetValue(k - i).ToString();
}
hzhbmoney = hzhbmoney.Replace("零分", "零");
hzhbmoney = hzhbmoney.Replace("零角", "零");
hzhbmoney = hzhbmoney.Replace("零拾", "零");
hzhbmoney = hzhbmoney.Replace("零佰", "零");
hzhbmoney = hzhbmoney.Replace("零仟", "零");
hzhbmoney = hzhbmoney.Replace("零零零", "零");
hzhbmoney = hzhbmoney.Replace("零零", "零");
hzhbmoney = hzhbmoney.Replace("零元", "元");
hzhbmoney = hzhbmoney.Replace("零万", "万");
hzhbmoney = hzhbmoney.Replace("零亿", "亿");
hzhbmoney = hzhbmoney.Replace("零兆", "兆");
hzhbmoney = hzhbmoney.Replace("兆亿", "兆");
hzhbmoney = hzhbmoney.Replace("兆万", "兆");
hzhbmoney = hzhbmoney.Replace("亿万", "亿");
}
if (hzhbmoney.EndsWith("元零"))
{
hzhbmoney = hzhbmoney.TrimEnd('零') + "整";
}
else if (hzhbmoney.EndsWith("角零"))
{
hzhbmoney = hzhbmoney.TrimEnd('零');
}
return hzhbmoney;
}
这是人家的VBA代码。连“垓京”都出来了。我不需要那么多。这个函数作者一下找不到了,在此致歉!
'数字金额转换汉字金额
Public Function CRMB(ByVal StrRMB As String) As String
Dim i As Long, k As Long, j As Long, N As Long
Dim RMB As String, intString As String, decString As String, tmpString() As String, cnNumber() As String, cnUnit() As String
On Error GoTo cnstr_err: '初始化中文数字、单位
cnNumber = Split("零,壹,贰,叁,肆,伍,陆,柒,捌,玖", ",")
cnUnit = Split("分,角,元,拾,佰,仟,万,拾,佰,仟,亿,拾,佰,仟,兆,拾,佰,仟,京,拾,佰,仟,垓,拾,佰,仟", ",")
decString = ""
intString = StrRMB
tmpString = Split(StrRMB, ".")
If UBound(tmpString) Then
intString = tmpString(0)
decString = tmpString(1)
End If
intString = intString & Left(decString & "00", 2)
RMB = ""
k = Len(intString) - 1
If k > 25 Then 'Len(cnUnit) - 1
RMB = StrRMB '超出转换范围,返回原值
Else
If Val(intString) = 0 Then
RMB = ""
Else
For i = 0 To k
j = Val(Mid(intString, i + 1, 1))
RMB = RMB & cnNumber(j) & cnUnit(k - i)
Next i
RMB = Replace(RMB, "零分", "零")
RMB = Replace(RMB, "零角", "零")
RMB = Replace(RMB, "零拾", "零")
RMB = Replace(RMB, "零佰", "零")
RMB = Replace(RMB, "零仟", "零")
RMB = Replace(RMB, "零零零", "零")
RMB = Replace(RMB, "零零", "零")
RMB = Replace(RMB, "零元", "元")
RMB = Replace(RMB, "零万", "万")
RMB = Replace(RMB, "零亿", "亿")
RMB = Replace(RMB, "零兆", "兆")
RMB = Replace(RMB, "零京", "京")
RMB = Replace(RMB, "零垓", "垓")
RMB = Replace(RMB, "垓京兆亿万", "垓")
RMB = Replace(RMB, "垓京兆亿", "垓")
RMB = Replace(RMB, "京兆亿万", "京")
RMB = Replace(RMB, "垓京兆", "垓")
RMB = Replace(RMB, "京兆亿", "京")
RMB = Replace(RMB, "兆亿万", "兆")
RMB = Replace(RMB, "垓京", "垓")
RMB = Replace(RMB, "垓兆", "垓")
RMB = Replace(RMB, "垓亿", "垓")
RMB = Replace(RMB, "垓万", "垓")
RMB = Replace(RMB, "京兆", "京")
RMB = Replace(RMB, "京亿", "京")
RMB = Replace(RMB, "京万", "京")
RMB = Replace(RMB, "兆亿", "兆")
RMB = Replace(RMB, "兆万", "兆")
RMB = Replace(RMB, "亿万", "亿")
If Right(RMB, 2) = "元零" Then '整元时
RMB = Left(RMB, Len(RMB) - 1) & "整"
ElseIf Right(RMB, 2) = "角零" Then '有角或分时
RMB = Left(RMB, Len(RMB) - 1)
End If
End If
End If
cnstr_exit:
CRMB = RMB
Exit Function
cnstr_err:
RMB = ""
Resume cnstr_exit
End Function