在.NET中,如何将“0.000”转换为“long”?

时间:2010-06-08 11:41:53

标签: .net parsing

我有一个字符串,“0.000”(或任何类似的字符串),我想转换为long。我很高兴在小数点后“砍掉”任何东西。

最好的方法是什么?

我可以转换为double然后转换为long,但我只是想知道是否有更简单的方法。以下所有语句都会抛出异常:

long l3 = Convert.ToInt64(nrToConvert);

long l1;
long.TryParse(nrToConvert, out l1);

long l2 = long.Parse(nrToConvert);

5 个答案:

答案 0 :(得分:5)

通常,在解析字符串值时,我会首先将其解析为它所代表的类型。因此在这种情况下将其解析为double,因为它是double。是的,我写的解析不是故意转换的。 在解析字符串时,有很多事情可能会出错,所以总是计划解析失败!它几乎肯定会在某个时候。

double val;
if(double.TryParse(nrToConvert,out val))
{
  //yous should validate that the value is within the expected range as well
  return (long)val;
}
else
{
  //do some error handling;
}

答案 1 :(得分:3)

只要分数为零,您可以通过告诉它小数点是可接受的来解析这些字符串:

        long value = long.Parse("0.000", System.Globalization.NumberStyles.AllowDecimalPoint);

然而,它不会截断或舍入数字,非零分数会引发异常(或TryParse失败)。您需要明确应用所需的截断类型:

        long value = (long)decimal.Parse("1.500");

或者使用Math.Round,Truncate,Ceiling。请注意,在技术上你不应该使用double.Parse(),long有太多数字要用double精确表示(19,double只支持15位有效数字)。

答案 2 :(得分:2)

你有没有试过这个链接:

(long)Math.Round(double.Parse("1.234"));

当然,您应该首先使用TryParse,但这应该可以帮助您入门。

答案 3 :(得分:1)

long myLong = Int64.Parse('0.000');

它可以抛出一个System.FormatException来满足它。如果你只是想让它在无法解析的情况下返回0,那么还有Int64.TryParse()

答案 4 :(得分:1)

这些都不会起作用(你会得到一个“String格式错误”异常,TryParse会失败),你需要任何一个 1)首先将字符串转换为double,然后转换为Long

long lng = (long)Convert.ToDouble(nrToConvert); 

2)修剪字符串中的小数并转换(类似)

string nrToConvert =  "0.000";
nrToConvert = nrToConvert.IndexOf('.') > 0 ? nrToConvert.Substring(0, nrToConvert.IndexOf('.') ) : nrToConvert;

long lng = Convert.ToInt64(nrToConvert);

然而,我会选择1,它会更好地反映你正在做的事情(采取双倍并将其转换为长)