C# 为什么0.43转换为43?

C# 为什么0.43转换为43?,c#,visual-studio,decimal,C#,Visual Studio,Decimal,为什么Cbm填充的是43而不是0,43 string strCbm; decimal Cbm; strCbm = unConvertedCbm.CustomValue.Replace(".", ","); Cbm = (Quantity * Decimal.Parse(strCbm)); 供您参考: 未转换的CBM.CustomValue=填入0.43 数量=用1填充 下面我将描述此代码: 我创建一个字符串和一个小数。 我将CustomValue中的所有“.”替换为“,”。 CustomVa

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

string strCbm;
decimal Cbm;

strCbm = unConvertedCbm.CustomValue.Replace(".", ",");
Cbm = (Quantity * Decimal.Parse(strCbm));
供您参考:

未转换的CBM.CustomValue=填入0.43

数量=用1填充

下面我将描述此代码:

我创建一个字符串和一个小数。 我将CustomValue中的所有“.”替换为“,”。 CustomValue被插入到strCbm中,0.43转换为0,43。 Cbm由Quantity1乘以0,43填充,转换为a 十进制的 我认为Cbm应该是0,43,而不是43


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

因为区域性的小数点分隔符是,而不是。可能尝试执行0.5.t字符串,看看结果是0.5还是0.5

事实上,您不应该使用替换,您应该:

var culture = new CultureInfo("someculturegoeshere");
然后

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

这是因为您的文化将“.”符号识别为小数点,而不是“,”符号。可以使用CultureInfo类将十进制数转换为所需的区域性

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

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

等等。

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

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

不要这样做:未转换的CBM.CustomValue.Replace。,;。Do Decimal.Parsenew CultureInfosomeCultureGeoHere谢谢,我没有考虑文化问题,我确实在应用程序中从英语改为荷兰文化。如果我能: