0

为什么 Cbm 填充的是 43 而不是 0,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(转换为小数)

我认为 Cbm 应该是 0,43 而不是 43。

为什么 Cbm 填充的是 43 而不是 0,43?

4

3 回答 3

6

因为您的文化的小数点分隔符是 the ,,而不是 the .possible。尝试做(0.5).ToString(),看看你的结果是否为0.50,5

事实是你不应该使用Replace,你应该这样做:

var culture = new CultureInfo("someculturegoeshere");

接着

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

这是因为你的文化承认“。” 符号作为小数点,而不是“,”符号。您可以使用 CultureInfo 类将小数转换为所需的文化。

例如,如果你想使用法语格式,你可以这样做:

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 回答