2

多くの問題に直面しているオブジェクトのプロパティから変換しようとしてstringいます。integer

第1の方法

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

2番目の方法

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

上記のコードの値は常にゼロです

3番目の方法

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

ここで私は値を150正しく取得していますが、私が使用nullしてIFormatProviderいるように、これに問題はありますか?

これらのケースで文字列を整数に変換する適切な方法はどれですか?

4

4 に答える 4

1

値 150.0 には、小数点記号「.」が含まれます。そのため、整数型 (Int32 など) に直接変換することはできません。最初に double に、次に Int32 に変換する 2 段階の変換で目的の値を取得できます。

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が発生します。小数点をなくすか、float に変換してから int に変換します。

于 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 に答える