私はC#が初めてなので、float
値(x, y, z)
ファイルから。次のようになります。
0 -0.01 -0.002
0.000833333333333 -0.01 -0.002
Iamがしようとしている場合
float number = float.Parse("0,54"); // it works well, but
float number = float.Parse("0.54"); // gains exepction.
各行から値を読み取るための私のコード(バグがあります):
int begin = 0;
int end = 0;
for (int i = 0; i < tempLine.Length; i++)
{
if (Char.IsWhiteSpace(tempLine.ElementAt(i)))
{
end = i;
float value = float.Parse(tempLine.Substring(begin, end));
begin = end;
System.Console.WriteLine(value);
}
}
誰かが助けることができますか?
float.Parse(string)
method は、デフォルトで現在のカルチャ設定を使用します。 CurrentCulture
の NumberDecimalSeparator
プロパティ は_,
_ではなく_.
_のように見えます
_"0.54"
_の例でFormatException
を取得する理由です。
解決策として、NumberDecimalSeparator
メソッドの2番目のパラメーターとして InvariantCulture
のようなParse
として_.
_を持つカルチャーを使用できますまたは、 .Clone()
your CurrentCulture
に設定し、NumberDecimalSeparator
プロパティを_.
_に設定します。
_float number = float.Parse("0.54", CultureInfo.InvariantCulture);
_
または
_var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
float number = float.Parse("0.54", culture);
_
カルチャはcomma
を小数点記号として使用しているようです。 InvariantCulture
で解析してみてください
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);
これに加えて、行を解析する方法は必要以上に複雑です。インデックスを処理する代わりに、行を分割することができます。
foreach(var str in tempLine.Split())
{
float value = float.Parse(str, CultureInfo.InvariantCulture);
}