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

问题描述 投票:0回答:7

将空字符串或包含“1.2”的字符串转换为整数的最佳方法是什么?当然,

int.TryParse
失败了,我不想使用
float.TryParse
然后转换为
int

c# parsing floating-point int
7个回答
41
投票

解决方案 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());

注释


5
投票

我不知道解析为

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
投票
int a = (int)Math.Round(float.Parse("0.9"));

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


1
投票

也许你可以尝试使用字符串函数删除浮点之后的所有内容,然后转换为 int。但说真的,我认为这并不比转换为浮点数然后转换为整数更好。


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

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

0
投票

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

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

  var num1 = (float)Convert.ToDouble(num);
© www.soinside.com 2019 - 2024. All rights reserved.