字符串未转换为整数

本文关键字:整数 转换 字符串 | 更新日期: 2023-09-27 18:20:09

我正试图将string从对象的属性转换为integer,在那里我遇到了很多问题。

第一种方法

public class test
{
    public string Class { get; set; }
}
//test.Class value is 150.0
var i = Convert.ToInt32(test.Class);

Input String is not in a correct format 正在说错误

第二种方法

int i = 0;
Int32.TryParse(test.Class, out i);   

上述代码的值始终为零

第三种方法

int j = 0;
Int32.TryParse(test.Class, NumberStyles.Number, null, out j);

在这里,我正确地获得了150的值,但由于我将null用于IFormatProvider,这会有任何问题吗?

在这些情况下,将字符串转换为整数的正确方法是什么?

字符串未转换为整数

值150.0包含十进制分隔符".",因此无法转换直接转换为任何整数类型(例如Int32)。您可以获得两级转换中的期望值:首先转换为双倍,然后转换为Int32

Double d;
if (Double.TryParse(test.Class, NumberStyles.Any, CultureInfo.InvariantCulture, out d)) {
  Int32 i = (Int32) d;
  // <- Do something with i
}
else {
  // <- test.Class is of incorrect format
}

如果您确定test.class包含浮点值,最好使用此

float val= Convert.ToSingle(test.class, CultureInfo.InvariantCulture);

Convert.ToInt32("150.0") Fails Because It is simply not an integer as the error says quite handsomly

从MSDN文档中:如果"值不是由一个可选符号后面跟着一系列数字(0到9)组成",则会得到一个FormatException。丢失小数点,或者转换为浮点,然后转换为整数。

正如其他人所说,你不能将150.0转换为整数,但你可以将其转换为Double/Single,然后将其强制转换为int。

int num = (int)Convert.ToSingle(test.Class) //explicit conversion, loss of information

来源:http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx