1. ホーム
  2. c#

[解決済み] C#で文字列をdoubleに変換する

2022-03-05 10:50:17

質問

で区切られたダブルタイプの値を持つ長い文字列があります。 # - value1#value2#value3# その他

それを文字列テーブルに分割しました。そして、このテーブルから一つ一つの要素をdouble型に変換したいのですが、エラーが発生します。型変換に何か問題があるのでしょうか?

string a = "52.8725945#18.69872650000002#50.9028073#14.971600200000012#51.260062#15.5859949000000662452.23862099999999#19.372202799999250800000045#51.7808372#19.474096499999973#";
string[] someArray = a.Split(new char[] { '#' });
for (int i = 0; i < someArray.Length; i++)
{
    Console.WriteLine(someArray[i]); // correct value
    Convert.ToDouble(someArray[i]); // error
}

解決方法は?

3つの問題があります。

1) 小数点以下の区切り文字が正しくない

異なる文化圏では、異なる小数点以下の区切り記号を使用します。 ,. ).

を置き換えると ., を実行すると、期待通りに動作するはずです。

Console.WriteLine(Convert.ToDouble("52,8725945"));

2番目のパラメータとしてcultureを受け取るオーバーロードされたメソッドを使用して、ダブルをパースすることができます。この場合 InvariantCulture ( 不変の文化とは を使用するなど)。 double.Parse :

double.Parse("52.8725945", System.Globalization.CultureInfo.InvariantCulture);

にも注目してみてください。 double.TryParse これは多くのオプションで使用することができ、特に文字列が有効な double .

2) ダブルが正しくありません

ドットが2つ含まれているため、値の1つは不正確です。

15.5859949000000662452.23862099999999

3) 配列の末尾に空の値があります。

オーバーロードされた Split で、空の値を削除します。

string[] someArray = a.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);