将字符串十进制转换为int

我有一个字符串“246246.246”,我想传递给IConvertable接口,ToInt16,ToInt32,ToIn64。 将带小数位的字符串解析为整数的最佳方法是什么?

这是一个解决方案,但有更好的解决方案吗?

string value = "34690.42724"; Convert.ToInt64(Convert.ToDouble(value)); 

要做到这一点折扣舍入,你可以这样做:

 Convert.ToInt64(Math.Floor(Convert.ToDouble(value))); 

如果你需要舍入,你可以用Math.Floor替换Math.Round

编辑:由于您在评论中提到您将进行四舍五入:

 Convert.ToInt64(Math.Round(Convert.ToDouble(value))); 

如果你不得不担心本地化/全球化,那么@xls说你应该在转换中应用CultureInfo。

编辑2:使用字符串函数的替代方法(不是非常优雅的IMO – 也许它可以通过谓词函数进行优化):

 Convert.ToInt64(value.Substring(0, value.IndexOf('.') > 0 ? value.IndexOf('.') : value.Length)); 

您不应该舍入值,因为ToInt64(double)已经返回舍入版本

  string value = "246246.246"; Convert.ToInt64(Convert.ToDouble(value)); 

如果你真的担心准确性而不是速度,那么十进制类型会更好。

 (long)Math.Round(decimal.Parse(value)); 

假设此字符串来自用户输入,您可能希望捕获数字样式。 通过可重用的function运行它,如此…

 int? ConvertToNumber(string value) { if (value == string.Empty) return null; try { var dec = decimal.Parse(value, NumberStyles.AllowDecimalPoint | NumberStyles.Number | NumberStyles.AllowThousands); return (int)Math.Round(dec); } catch (Exception ex) { Console.WriteLine("Please input a number."); return null; } }