c# 最后调用出错
以下是我参考别人的一个转换人民币大写的函数程序,放在c#环境中进行调试,到最后出错,麻烦大家给打点一下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Webtest
{
/// <summary>
/// monkeytest 的摘要说明。
/// </summary>
public class monkeytest : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lbl1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
public static string CmyCurD(decimal num)
{
string str1="零壹贰叁肆伍陆柒捌玖";//0-9所对应的汉字//
string str2="万仟佰拾亿仟佰拾万仟佰拾元角分";//数字位所对应的汉字//
string str3="";//从原num值中取出的值//
string str4="";//数字的字符串形式//
string str5="";//人民币大写金额形式//
int i;//循环变量//
int j;//num的值乘以100的字符串长度//??//
string ch1="";//数字的汉语读法//
string ch2="";//数字位的汉字读法//
int zeronum=0;//用来计算连续的零值是几个//
int temp;//从原num值中取出的值,将字符形式转换为数字//
num=Math.Round(Math.Abs(num),2);//将num取绝对值并四舍五入取2位小数,num是函数的形参//
str4=((long)(num*100)).ToString();//将num乘以100并转换成字符串形式//
j=str4.Length ;//找出最高位//
if(j>15)
{
return "error!";
}
str2=str2.Substring(15-j);//取出对应位数的str2的值,例如200.55,j为5,所以str2=佰拾元角分//
//循环取出每一位需要转换的值
for(i=0;i<j;i++)
{
str3=str4.Substring(i,1);//取出相应位//
temp=Convert.ToInt32(str3);//转换为数字//
if(i!=(j-3)&&i!=(j-7)&&i!=(j-11)&&i!=(j-15))//当所取位数不为元,万,亿,万亿上的数字时//
{
if(str3=="0")
{
ch1="";
ch2="";
zeronum=zeronum+1;
}
else
{
if(str3!="0"&& zeronum!=0)
{
ch1="零"+str1.Substring(temp*1,1);
ch2=str2.Substring(i,1);
zeronum=0;
}
else
{
ch1=str1.Substring(temp*1,1);
ch2=str2.Substring(i,1);
zeronum=0;
}
}
}
else
{
//该位是万亿,亿,成,元等关键位//
if(str3!="0"&& zeronum!=0)
{
ch1="零"+str1.Substring(temp*1,1);
ch2=str2.Substring(i,1);
zeronum=0;
}
else
{
if(str3!="0"&& zeronum==0)
{
ch1=str3.Substring(temp*1,1);
ch2=str2.Substring(i,1);
zeronum=0;
}
else
{
if(str3=="0"&&zeronum>3)
{
ch1="";
ch2="";
zeronum=zeronum+1;
}
else
{
if(j>=11)
{
ch1="";
zeronum=zeronum+1;
}
else
{
ch1="";
ch2=str2.Substring(i,1);
zeronum=zeronum+1;
}
}
}
}
}
if(i==(j-11)||i==(j-3))
{
//如果该位是亿位或元位,则必须写上//
ch2=str2.Substring(i,1);
}
str5=str5+ch1+ch2;
if(i==j-1&&str3=="0")
{
str5=str5+'整';
}
}
if(num==0)
{
str5="零元整!";
}
return str5;
}
public static string CmycurD(string numstr)
{
try
{
decimal num=decimal.Parse(numstr);
return CmycurD(num);
}
catch
{
return "非数字形式!";
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
就是这里运行不通:return CmycurD(num);
出错原因是:
1.与该方法最匹配的重载方法具有一些无效参数;
2.无法从"decimal"转换为"string"
请大家指点一下,急!