字符串不转换为整数

时间:2013-06-28 05:42:51

标签: c#

我正在尝试将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这样会有任何问题吗?

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

值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
}

答案 2 :(得分:0)

从MSDN documentation:如果“值不包含可选符号后跟一系列数字(0到9)”,则会得到FormatException。丢失小数点,或转换为浮点数,然后转换为int。

答案 3 :(得分: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