我有一个方法:
public static double c(string val)
{
return Math.Round(Convert.ToDouble(val), 4);
}
我传入一个字符串,如果它是一个double,我想要舍入然后返回一个double,但是如果它是一个字符串,我想按原样返回一个字符串。我传入的所有参数都将是要开始的字符串,如何确定它是字符串还是双精度,以及如何重写方法以使返回类型足够灵活返回?
理想情况下,我想在vba中使用类型变体,但我不认为c#中存在模拟。
答案 0 :(得分:4)
以下内容将尝试解析double
。如果返回true
,它会将double放在输出变量output
中;否则返回false
表示val
不是双倍的,您应该使用string val
代替。
public static bool c(string val, out double output)
{
if (double.TryParse(val, out output))
{
output = Math.Round(output, 4);
return true;
}
else
{
output = 0;
return false;
}
}
像这样使用:
string val = "123.45678";
double output;
if ( c(val, out output) )
{
// use double output
}
else
{
// val isn't a double, just use val directly
}
答案 1 :(得分:1)
答案 2 :(得分:1)
不确定为什么要做这样的事情,但动态类型怎么样......
public dynamic func(string s)
{
double d = 0;
if (double.TryParse(s, out d))
return Math.Round(d, 4);
return s;
}
答案 3 :(得分:0)
在.Net 4中,您可以使用
public static string c(string val)
{
Double result;
if (Double.TryParse(val, out result))
return Math.Round(result, 4).ToString();
else
return val;
}
如果您不使用.Net 4
public static string c(string val)
{
try
{
Double result = Convert.ToDouble(val);
return Math.Round(result, 4).ToString();
}
catch
{
return val;
}
}