C#将包含浮点的字符串转换为整数

时间:2010-08-03 09:54:33

标签: c# parsing floating-point int

获取可以为空或包含“1.2”的字符串的最佳方法是什么,并将其转换为整数?当然,int.TryParse失败,我不想使用float.TryParse,然后转换为int

7 个答案:

答案 0 :(得分:35)

解决方案1:Convert.ToDouble(取决于文化)

您可以使用Convert.ToDouble。但是,要小心!仅当当前区域性设置中的数字分隔符是句点字符时,以下解决方案才有效。

var a = (int)Convert.ToDouble("1.2");    

解决方案2:Convert.ToDouble(与文化无关)

最好使用IFormatProvider并以独立方式从当前文化设置转换数字:

var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat); 

解决方案3:解析&分割

完成此任务的另一种方法是在解析后的字符串上使用Split:

var a = int.Parse("1.2".Split('.')[0]);

或者:

var a = int.Parse("1.2".Split('.').First());

注释

答案 1 :(得分:4)

我不知道解析为float并转换为int时出了什么问题。我怀疑任何其他方式会更有效但这是一次尝试:

//allows empty strings and floating point values
int ParseInt(string s, bool alwaysRoundDown = false)
 {
    //converts null/empty strings to zero
    if (string.IsNullOrEmpty(s)) return 0;

    if (!s.Contains(".")) return int.Parse(s);

    string parts = s.Split(".");
    int i = int.Parse(parts[0]);
    if (alwaysRoundDown || parts.Length==1) return i;

    int digitAfterPoint = int.Parse(parts[1][0]);
    return (digitAfterPoint < 5) ? i : i+1;
 }

为了全球化代码,您需要将"."替换为System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator

答案 2 :(得分:1)

也许您可以尝试使用字符串函数删除浮点后的所有内容,然后转换为int。但严重的是,我认为这不比转换为f​​loat然后转换为int更好。

答案 3 :(得分:1)

int a = (int)Math.Round(float.Parse("0.9"));

除非您希望0.9f转换为0而不是1,否则您需要先将其舍入。

答案 4 :(得分:0)

我认为另一种方法是将字符串拆分为小数(。)作为分隔符,然后解析整数。当然,我还没问你字符串是否包含类似"37.56 miles in 32.65 seconds"类型值的值。

考虑到字符串中只有一个值(字符串或数字),我可以想到以下几行:

public int64 GetInt64(string input)
{
    if (string.IsNullOrEmpty(input)) return 0;
    // Split string on decimal (.)
    // ... This will separate all the digits.
    //
    string[] words = input.Split('.');
    return int.Parse(words[0]);
}

答案 5 :(得分:0)

您可以使用Visual Basic运行时库从c#。

完成此操作

您需要将程序集Microsoft.VisualBasic.dll的引用添加到您的解决方案中。

然后以下代码将进行转换:

using VB = Microsoft.VisualBasic.CompilerServices;

class Program
{
    static void Main(string[] args)
    {
        int i = VB.Conversions.ToInteger("1.2");
    }
}

答案 6 :(得分:0)

我遇到了同样的问题,最终使用了Mark和Dariusz的混合体:

 if (num == "")
     {
      num = "0.00";
     }

  var num1 = (float)Convert.ToDouble(num);