将字符串十进制转换为int

Mik*_*ike 29 c# parsing

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

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

string value = "34690.42724";
Convert.ToInt64(Convert.ToDouble(value));
Run Code Online (Sandbox Code Playgroud)

Joe*_*ton 54

要做到这个折扣舍入你可以做:

Convert.ToInt64(Math.Floor(Convert.ToDouble(value)));
Run Code Online (Sandbox Code Playgroud)

如果你需要你周围,你可以取代Math.Floor使用Math.Round.

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

Convert.ToInt64(Math.Round(Convert.ToDouble(value)));
Run Code Online (Sandbox Code Playgroud)

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

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

Convert.ToInt64(value.Substring(0, value.IndexOf('.') > 0 ? value.IndexOf('.') : value.Length));
Run Code Online (Sandbox Code Playgroud)

  • @Mike - 有时两点之间的最短距离是一条直线.在某种程度上你必须转换.你可以用一些字符串函数来缩短它. (2认同)
  • 您不应该舍入值,因为ToInt64(double)已经返回舍入版本 (2认同)

dee*_*ee1 11

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

        string value = "246246.246";
        Convert.ToInt64(Convert.ToDouble(value));
Run Code Online (Sandbox Code Playgroud)