Convert.ToDouble(string value);
私は、他の人と同じように、特定の時点まで問題がありませんでした。 この機能には、誰にも知られていない機能があります。デフォルトのセパレータはシステム上にあるものです。
英語圏ではピリオドが区切り記号として使用され、他の国ではコンマが主に使用されます。 原則として、すべてが悪いわけではなく、ほとんどの最新のプログラムと同様に、.Net環境はどのセパレーターがシステムで使用されているかを知っています。 しかし、Meta Traderなどのプログラムは、セパレーターを知らなかったロシアのプログラマーによって作成されたもので、デフォルトでは常にコンマが使用されます。 MT4からデータアプリケーションへの転送と、ソケットを介した転送を実装する必要がありました。 コンピューターでのテスト中に、奇妙な動作に気づきませんでした。 システムにはデフォルトの「、」があります。 しかし、このプログラムは外国の顧客向けに書かれたもので、理論上はすべてが同じように機能するはずでした。 私のプログラムが文字列からDoubleに変換するときに受け入れたデータが、例外なく正しく処理されなかった理由は明らかではありません。 たとえば、文字列「1.4174」からコンピューター上の数値への変換では同じ結果が得られましたが、顧客の「1.4174」では結果が14174でした。
エラー自体とは対照的に、解決策はすぐに見つかりました-コンマをシステムで使用される文字に置き換えます。
行:
String Source = "0,05"; Double number = Convert.ToDouble(Source);
期間がシステムの区切り文字である場合、FormatExceptionを発生させます。
それらを置き換えます
Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0]; String Source = "0,05".Replace( ',' , separator); Double number = Convert.ToDouble(Source);
システムで使用される文字に関係なく、問題は解決され、文字列内のコンマがこの文字に置き換えられます-変換に適した形式を取得します。
システムの区切り記号を変更するには、次の場所に移動します。
外国の顧客のために働く場合、このニュアンスを決して忘れないことを願っています。 そして、それは時間を節約するのに役立ちます。