繁体   English   中英

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

[英]C# Converting a string containing a floating point to an integer

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

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

笔记

我不知道解析到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

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

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

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

我认为另一种方法是将字符串拆分为小数(。)作为分隔符,然后解析整数。 当然,我还没问你字符串是否包含类似"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]);
}

您可以使用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");
    }
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM