为什么0.43转换为43?

时间:2013-08-22 11:23:19

标签: c# visual-studio decimal

为什么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填充数量(1)乘以0.43(转换为a 十进制)
  5. 在我看来,Cbm应该是0.43而不是43。

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

3 个答案:

答案 0 :(得分:6)

因为您的文化的小数点分隔符可能是,而不是.。尝试执行(0.5).ToString(),看看您的结果是0.5还是0,5

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

var culture = new CultureInfo("someculturegoeshere");

然后

Decimal Cbm = Decimal.Parse(strCbm, culture); 

答案 1 :(得分:1)

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

例如,如果您想使用法语格式,您可以执行以下操作:

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

等等。

答案 2 :(得分:0)

您可以阅读有关它的详细信息here。你可以这样做

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);