求一算法:在C#中怎么将数字字符串转换为数字?

如题。
因为是求一算法。。
所以大家的代码最好的在性能上和稳定性上都很健壮的。。

C#的。不要C的C我初学,很多代码都看不懂。
大家都没按照我的要求答啊。我又开了一个200分的同样的问题,总共250分,以慰劳大家的辛苦之情。希望大家看照要求答。
另一个问题的地址:http://zhidao.baidu.com/question/42109226.html

/// <summary>
/// 自定义数字解析函数
/// 作者:三角猫
/// 说明:如果输入的字符串为空或非数字开头则返回0,否则返回解析结果
/// </summary>
/// <param name="v">输入的字符串</param>
/// <returns>解析后的结果</returns>
static double CustomNumericParse(string v)
{
if (string.IsNullOrEmpty(v)) return 0d; //如果输入的字符串为空或NULL,则直接返回0
if (!char.IsDigit(v[0])) return 0d; //如果输入的字符串是非数字开头,直接返回0
string subV = string.Empty;
for (int i = 0; i < v.Length; i++)
{
if (char.IsDigit(v[i]) || (v[i].Equals('.') && !subV.Contains("."))) //从左至右,判断字符串的每位字符是否是数字或小数点,小数点只保留第一个
subV += v[i];
else
break;
}

subV.TrimEnd(new char[] { '.' }); // 如果解析后的子字符串的末位是小数点,则去掉它

double returnV = 0d;
if (subV.Contains(".")) // 如果解析结果包含小数点,则根据小数点分两段求值
{
string strPointRight = subV.Substring(subV.IndexOf('.') + 1); //小数点右侧部分
subV = subV.Substring(0, subV.IndexOf('.')); //小数点左侧部分

//计算小数点右侧的部分
for (int i = 0; i < strPointRight.Length; i++)
{
returnV += ((int)strPointRight[i] - 48) / Math.Pow(10, i+1); //(int)strPointRight[i] 是取该字符的ASCII码
}
}

//计算小数点左侧的部分
int iLen = subV.Length; //小数点左侧部分的长度

for (int i = 0; i < iLen; i++)
{
returnV += ((int)subV[i] - 48) * Math.Pow(10, iLen - 1 - i); //按位乘以10的幂,并和小数点右侧结果相加
}

return returnV;
}

//使用方法
string a = "123.98adfd"; Console.Write(CustomNumericParse(a));
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-12-21
正确答案如下:
public string GetNumber(string input)
{
Match m = Regex.Match(input, "(?:\\d*(\\.\\d*)?)");
return m.Value;
}

上面的代码经过了测试,可以正常工作

string s = GetNumber("123asdf");
string a = GetNumber("123.45sadf");
string e = GetNumber("123.sadf");
第2个回答  2007-12-21
public double GetNumber(string str)
{
Regex reg = new Regex("(?<gg>[0-9]*\.?[0-9]*)");
Match m = reg.Match(str);
double aa =Convert.ToDouble( m.groups["gg"]);
return aa;
}

用正则式吧,这个比较好,没有BUg的。建议用这个。如果你说不用Convert那么我们就返回字符串得了
public string GetNumber(string str)
{
Regex reg = new Regex("(?<gg>[0-9]*\.?[0-9]*)");
Match m = reg.Match(str);
string aa =m.groups["gg"];
return aa;
}
第3个回答  2007-12-22
我靠,数字还字符串 那不和数字一样啊!
第4个回答  2007-12-26
写个思路吧:
首先检查字符串中是否有数字和小数点之外的字符,然后使用decimal.Parse(yourString)即可

例如:
try
{
decimal num=decimal.Parse(this.textBox1.Text);
this.textBox2.Text=num.ToString();
}
catch
{
MessageBox.Show("输入的字符串中含有非法字符");

}
第5个回答  2007-12-30
//将字符串转换为数值
public static string StringToNumerical(stringstrOld)
{
string revalue="";
bool HadPoint=false;
for(int i=0;i<strOld.Length;i++)
{
if((char)strOld[i]>='0' && (char)strOld[i]<='9')
{
reValue+=strOld[i].ToString();
}
else
{
if((char)strOld[i]=='.' && !HadPoint)
{
reValue+=".";
HadPoint=true;
}
else
{
break;
}
}
}

//当数值字符串为空时则默认为0
if(reValue=="")
{
reValue="0";
}

//消除数值前面的0,如00123应该为123
for(i=0;i<reValue.Length;i++)
{
if(reValue[i].ToString()=="0")
{
reValue=reValue.SubString(1,reValue.Length-1);
}
}

//最后一位是"."则去掉"."
if(reValue.EndWith('.'))
{
revalue=reValue.SubString(0,CreValue.Length-1);
}

//第一位是"."则在数值字符串前加0
if(reValue.BeginWith('.'))
{
reValue="0"+reValue;
}

return reValue;
}

C#如何将字符型表达式转化为数字表达式
JavaScript eval() 函数 例子: eval("x=10;y=20;document.write(x*y)")document.write(eval("2+2"))var x=10 document.write(eval(x+17)) 输出:200 4 27 看下面这个地址 参考资料:http:\/\/www.w3school.com.cn\/js\/jsref_eval.asp ...

"4,5,3.145,15.0"这样的string在c#中如何转换为int,int,double,float...
string s="4,5,3.145,15.0";foreach(string item in s.Split(',')){ Convert.ToInt32(item);}这样既可.

请问C#有什么算法可以将数字加密,而且得到的结果还是数字
这样你可以自定义算法,如果光输出是数字的话,应该还是比较容易的。1.给每个数乘2,结果输出按2位记,比如26加密后的0412。也就是2*2 = 04,6*2=12。你在解密的时候就将字符串按照两位进行拆分,然后再除以2,就会得到原来的密码,然后再合并。2.给每个数取相对于10的余,比如1的余为9,2的余...

C语言 在一个数组或指针里有一个算式(字符串),如何对它求值?
第一步:中缀表达式转为后缀表达式 第二步:对后缀表达式进行计算。下面对算法原理进行逐一讨论:逆波兰算法中的中缀转后缀的算法原理是这样的: 第一种情况:由表达式左边开始往右遍历,如果是数字则输出拼到后缀表达式里(出栈的元素也是一 样)。 第二种情况:如果是+-*\/四则运算则判断栈顶元素的运算符是...

请问c#中如何将十进制数的字符串转化成十六进制数的字符串?
Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, 2));\/\/十进制转八进制 Console.WriteLine("十进制166的八进制表示: "+Convert.ToString(166, 8));\/\/十进制转十六进制 Console.WriteLine("十进制166的十六进制表示: "+Convert.ToString(166, 16));\/\/二进制转十进制 Console....

输入一个八进制数字字符串,将其转换成十进制数后输出。C语言
printf("转换为十进制数为:%d\\n", decimal);return 0;} ```该代码中,首先使用 `scanf` 函数读入一个字符串。由于输入的是一个八进制数字字符串,因此可以直接使用字符数组存储。然后,使用循环遍历该字符串的每一位数字,并将其转换为十进制数。在计算过程中,将每一位数字乘以 8 的相应次幂,...

请问C#有什么算法可以将数字加密,而且得到的结果还是数字
你可以自己写一个啊,比如加密 12345,那你就想办法加密,比如:(12345+20)*2 解密的时候 就是 (加密后密码-20)\/2

c#: 将输入的任一字符串翻译成密文,密码规则:用原来的字母后的第3个...
static void Main(string[] args) { Console.WriteLine("请输入原文:"); string a = Console.ReadLine(); string c = ""; \/\/获取字符串每位的字符将ASCII码加3即可 for (int i = 0; i < a.Length; i++) { int b = a[i]; \/\/当为字母为X、Y、或...

C#字符串转换为浮点数
=== 1。逐字符读取,首先判断是否数字,如果不是就异常。2。用2个数分别存放整数及小数部分。在读取到小数点前处理整数部分。3。整数部分:读取下一个字符,当前的整数 * 10 + 下一个数字。4。小数部分:读取下一个字符,(当前的小数 + 下一个数字) \/ 10 5。返回(整数部分 + 小数部分)...

C#里如何对位数很长的数字(已处理为字符串)转化为16进制
当作 string 类型来计算,先截取最后一位,看够不够减2,够了就把减去的结果替换掉 string 最后一位;不够就再截取最后两位看,依次类推。除法就是反复做减法,直到最后一次减法结果要变负数为止,商和余数就出来了)。再把2进制转换成16进制就容易多了,从后往前每4位截断一下,最前面不足位用0...

相似回答