long.TryParse双值

时间:2013-09-30 19:52:03

标签: c# parsing

在ASP.NET C#中,我发布了一个值并在回发中我需要将其解析为long值。看起来,浮点值被视为非数字(或至少非长值) 如果发布的值是50.1

long x=0;
long.TryParse(Request.Form["x"], out x);

返回0,这是默认值。但我需要得到50

2 个答案:

答案 0 :(得分:7)

返回0是正确的。如果查看Int64.TryParse,它会声明它只解析整数值。 50.4不是整数值。

相反,您可以将其解析为Double,然后将其解整。

long x = 0;
Double value = 0;
if(Double.TryParse("50.4", out value))
{
   x = (long)Math.Truncate(value);
}

答案 1 :(得分:1)

这是预期的行为,因为50.1不是长值。你应该做的是先将它转换为Double,然后截断它。

double x1, x2;
double.TryParse(Request.Form["x"], out x1);
x2 = Math.Truncate(x1);

如果你担心这个值太大而不适合加倍,你就必须把它作为一个字符串来操作。

long x;
var splits = Request.Form["x"].Split('.');
long.TryParse(splits[0], out x);

请注意,我没有检查分割的结果是否有效,但是这应该让你开始。