我有一个字符串,"0.000“(或任何类似的字符串),我想要将其转换为长字符串。我很乐意去掉小数点后的任何东西。
做这件事最好的方法是什么?
我可以先转换为double,然后再转换为long,但我只是想知道是否有更简单的方法。以下所有语句都会抛出异常:
long l3 = Convert.ToInt64(nrToConvert);
long l1;
long.TryParse(nrToConvert, out l1);
long l2 = long.Parse(nrToConvert);
发布于 2010-06-08 19:52:42
通常,在解析字符串值时,我会首先将其解析为它所表示的类型。所以在本例中,将其解析为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;
}
发布于 2010-06-08 20:06:24
只要分数为零,就可以通过告诉小数点是可接受的来解析这些字符串:
long value = long.Parse("0.000", System.Globalization.NumberStyles.AllowDecimalPoint);
但是,它不会为您截断或舍入数字,非零分数会抛出异常(或使TryParse失败)。您需要显式应用所需的截断类型:
long value = (long)decimal.Parse("1.500");
或者使用Math.Round、Truncate、Ceiling。请注意,从技术上讲,您不应该使用double.Parse(),长整型的数字太多,无法用double精确表示(19,double仅支持15个有效数字)。
发布于 2010-06-08 19:50:56
你有没有尝试过链接这个链接:
(long)Math.Round(double.Parse("1.234"));
当然,您应该首先使用TryParse,但这应该可以让您开始使用它。
https://stackoverflow.com/questions/2996920
复制相似问题