2

我正在尝试从一个对象的属性转换stringinteger我面临很多问题的地方。

第一种方法

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这会有什么问题吗?

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

4

4 回答 4

1

如果您确定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

于 2013-06-28T05:47:49.240 回答
1

值 150.0 包括小数分隔符“。” 因此不能直接转换为任何整数类型(例如 Int32)。您可以在两阶段转换中获得所需的值:首先转换为 double,然后转换为 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
}
于 2013-06-28T05:50:45.947 回答
0

从 MSDN文档中:如果“值不包含可选符号后跟数字序列(0 到 9)”,则会收到 FormatException。丢失小数点,或转换为浮点数,然后再转换为整数。

于 2013-06-28T05:53:53.013 回答
0

正如其他人所说,您不能将 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

于 2013-06-28T05:55:40.113 回答