0

Cbm が 0.43 ではなく 43 で埋められるのはなぜですか

string strCbm;
decimal Cbm;

strCbm = unConvertedCbm.CustomValue.Replace(".", ",");
Cbm = (Quantity * Decimal.Parse(strCbm));

ご参考までに:

unConvertedCbm.CustomValue= 0.43 で埋める

Quantity= 1 で満たされる

次にこのコードについて説明します。

  1. 文字列と小数を作成します。
  2. すべての「。」を置き換えます。CustomValue に「,」を付けます。
  3. CustomValue が strCbm に挿入され、0.43 が 0.43 に変換されます。
  4. Cbm は Quantity(1) に 0.43 を掛けた値 (10 進数に変換) で満たされます。

私の意見では、Cbm は 43 ではなく 0.43 であるべきです。

Cbm が 0.43 ではなく 43 で埋められているのはなぜですか?

4

3 に答える 3

6

あなたの文化の小数点記号はおそらく,であり、おそらくではないから.です。やってみて(0.5).ToString()、結果が0.5またはになるかどうかを確認してください0,5

真実は、を使用すべきではないということです。使用するReplace必要があります。

var culture = new CultureInfo("someculturegoeshere");

その後

Decimal Cbm = Decimal.Parse(strCbm, culture); 
于 2013-08-22T11:26:54.053 に答える
1

それはあなたの文化が「.」を認識するからです。「,」記号ではなく、小数点としての記号。CultureInfo クラスを使用して、10 進数を目的のカルチャに変換できます。

たとえば、フランス語の形式を使用する場合は、次のようにします。

Decimal.Parse(strCbm, new CultureInfo("fr-FR"));

等々。

于 2013-08-22T11:30:52.570 に答える
0

詳細については、こちらをご覧ください。あなたはこれを行うことができます

string value;
NumberStyles style;
CultureInfo culture;
decimal number;            
value = "0,43";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Decimal.TryParse(value, style, culture, out number))
     Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
     Console.WriteLine("Unable to convert '{0}'.", value);
于 2013-08-22T11:42:12.000 に答える