我有一个字符串,“0.000”(或任何类似的字符串),我想转换为long。我很高兴在小数点后“砍掉”任何东西。
最好的方法是什么?
我可以转换为double然后转换为long,但我只是想知道是否有更简单的方法。以下所有语句都会抛出异常:
long l3 = Convert.ToInt64(nrToConvert);
long l1;
long.TryParse(nrToConvert, out l1);
long l2 = long.Parse(nrToConvert);
答案 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,它会更好地反映你正在做的事情(采取双倍并将其转换为长)