-1

double CoordinatesX = Convert.ToDouble(((((-1.2170 - (Convert.ToDouble(labelLonR.Text))) * -1) * (638 / 0.0548))));

入力文字列の形式が正しくありませんか? 方法がわかりません。すべてを double に変換しました。

どんな助けでも感謝します。

4

5 に答える 5

4

これはおそらく、文化設定の問題です。

例: "123.12" は現在のカルチャ設定では有効な double ではありませんが、"123,12" は有効です。

解決:

Convert.ToDouble("123.12", System.Globalization.CultureInfo.InvariantCulture);

テキストの形式が不明な場合は、CultureInfo.InvariantCultureを使用します。msdn から引用するには:

インバリアント カルチャはカルチャに依存しません。英語に関連付けられていますが、国/地域には関連付けられていません。CultureInfo インスタンス化メソッドの呼び出しで空の文字列 ("") を使用して、インバリアント カルチャを名前で指定します。CultureInfo.InvariantCulture は、インバリアント カルチャのインスタンスも取得します。カルチャを必要とする System.Globalization 名前空間のほぼすべてのメソッドで使用できます。CompareInfo、DateTimeFormat、NumberFormat などのプロパティによって返されるオブジェクトも、インバリアント カルチャの文字列比較および書式設定規則を反映しています。

ユーザーのカスタマイズ、または .NET Framework またはオペレーティング システムの更新によって変更される可能性があるカルチャに依存するデータとは異なり、インバリアント カルチャ データは、時間の経過と共に、インストールされたカルチャ間で安定しており、ユーザーがカスタマイズすることはできません。これにより、インバリアント カルチャは、カルチャに依存しない結果を必要とする操作 (書式設定されたデータを保持する書式設定および解析操作、カルチャに関係なくデータを固定順序で表示する必要がある並べ替えおよび順序付け操作など) に特に役立ちます。

別の注意として、 Convert.ToDouble の外側にあるいくつかの括弧を削除して、結果の割り当てをより良くすることができます

double CoordinatesX = (1.2170 + Convert.ToDouble(labelLonR.Text)) * 638 / 0.0548

編集:他の人が指摘したように、特にユーザーからの入力である場合は、プロパティで検証を行うことをお勧めします。

于 2012-12-04T17:56:43.737 に答える
0

このコードを試してください。この例外がスローされた場合、問題が何であるかがわかります...

double lonR;
double CoordinatesX;
if (double.TryParse(labelLonR.Text, out lonR))
    CoordinatesX = ((-1.2170 - lonR) * -1) * (638 / 0.0548);
else
    throw new Exception("The lonR format is Incorrect!");

Convertの代わりにTryParseを使用することを好みます。

于 2012-12-04T18:06:14.170 に答える
0

LINQパッド

string value = "50.339";
double CoordinatesX = Convert.ToDouble(((((-1.2170 - (Convert.ToDouble(value))) * -1) * (638 / 0.0548))));

CoordinatesX.Dump();

600232.262773723 を返します

labelLonR.Text に「50.339」がないことをお勧めします。null は 14168.7226277372 を返すので、数値以外の値を使用します。オーバーロード IFormatProvider で Convert.ToDouble() を使用することをお勧めします。あなたの会計士は暗黙のうちに (50.339) が負の数であることを理解しているかもしれませんが、CLS はそうではありません。

于 2012-12-04T18:07:03.060 に答える
0

labelLonR.Text は null になる可能性があるため、double に変換できません。 文字列を double に変換し、変換が成功したか失敗したかを返すDouble.TryParse

メソッドを使用します。それがチェックされたら、変数の初期化に進みます。

于 2012-12-04T18:00:03.717 に答える
0

試す

double value = 0;
double.TryParse(labelLonR.Text, out value);
double CoordinatesX = Convert.ToDouble(((((-1.2170 - value ) * -1) * (638 / 0.0548))));
于 2012-12-04T18:00:59.370 に答える