15

私はネットワークを介してダブルを渡しています。現在、私はそうしています

double value = 0.25;
string networkMsg = "command " + value;

英語でnetworkMsgは0.25、フランス語では0.25で問題ありませんが、フランス語のコンピューターから英語のコンピューターに移動すると、一方が0.25になり、もう一方が0.25を読み取ろうとします。

したがって、コードで領域不変メソッドを使用できます。

networkMsg地域に関係なく、常に 0.25 を読み取るVal( ) を見つけました。

しかし、値から 0.25 領域不変式に変換する保証された方法を見つけることができません。動作しますかvalue.toString("0.0")

4

3 に答える 3

13

使用する:

string networkMsg = "command " + value.ToString(CultureInfo.InvariantCulture);

また:

string networkMsg = string.Format(CultureInfo.InvariantCulture, "command {0}", value);

これはusing System.Globalization;ファイルの先頭に必要です。

Format注: 正確なdoubleを再度 復元できるように完全な精度が必要な場合は{0:R}、単に{0}. 他の書式文字列を使用することもできます。たとえば、{0:N4}3 桁ごとの区切り記号を挿入し、4 桁 (小数点以下 4 桁) に丸めます。


C# 6.0 (2015) 以降、以下を使用できるようになりました。

string networkMsg = FormattableString.Invariant($"command {value}");
于 2013-10-10T12:21:05.603 に答える
12

.形式指定子の は、実際には「ドット」を意味するの"0.0"ではなく、「小数点記号」を意味します。これは,、フランスや他のいくつかのヨーロッパの文化にあります。あなたはおそらく欲しい:

value.ToString(CultureInfo.InvariantCulture)

また

value.ToString("0.0", CultureInfo.InvariantCulture)

情報については、 frカルチャを調べることで、これ (および他の多くのこと) を確認できます。

var decimalSeparator = CultureInfo.GetCultureInfo("fr")
            .NumberFormat.NumberDecimalSeparator;
于 2013-10-10T12:21:24.120 に答える
4

インバリアント カルチャを形式プロバイダーとして指定します。

value.ToString(CultureInfo.InvariantCulture);
于 2013-10-10T12:21:25.513 に答える