将字符串十进制转换为int

时间:2011-02-12 01:06:01

标签: c# parsing

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

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

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

4 个答案:

答案 0 :(得分:50)

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

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));

答案 1 :(得分:10)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

Assuming this string comes from user input, you probably want to catch number styling. Run it through a reusable function like so...

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;
   }
}