使用format将字符串转换为十进制

我需要在C#中将String转换为十进制,但此字符串具有不同的格式。

例如:

“50085”

“500,85”

“500.85”

这应该转换为小数500,85。 是否有使用格式进行此转换的简化forms?

虽然decimal.Parse()是您要查找的方法,但您必须向其提供更多信息。 它不会自动在您提供的3种格式之间进行选择,您必须告诉它您期望的格式(以IFormatProvider的forms)。 请注意,即使使用IFormatProvider,我也不认为“50085”会被正确拉入。

我看到的唯一一致的是,从你的例子中可以看出,你总是希望得到两位小数的精度。 如果是这种情况,您可以删除所有句点和逗号,然后除以100。

也许是这样的:

 public decimal? CustomParse(string incomingValue) { decimal val; if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val)) return null; return val / 100; } 

有些文化使用逗号来表示浮点数。 您可以在aspx页面上使用以下代码对此进行测试:

 var x = decimal.Parse("500,85"); Response.Write(x + (decimal)0.15); 

当线程文化已设置为使用逗号作为浮点的区域性时,这给出了答案501。 你可以强制这样:

 var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," }); 

这将有效,具体取决于您的文化设置:

 string s = "500.85"; decimal d = decimal.Parse(s); 

如果您的文化不是默认允许,而不是. 作为小数点,您可能需要:

 s = s.Replace(',','.'); 

但是需要检查多个. ……这似乎归结为更多的输入消毒问题。 如果您能够validation并清理所有符合一组规则的输入,则转换为十进制将更容易。

请尝试以下代码:

 string numValue = "500,85"; System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("fr-FR"); decimal decValue; bool decValid = decimal.TryParse(numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); if (decValid) { lblDecNum.Text = Convert.ToString(decValue, culInfo.NumberFormat); } 

由于我给出了500,85的值,我将假设文化是法语,因此小数分隔符是“ , ”。 然后decimal.TryParse(numValue,System.Globalization.NumberStyles.Number,culInfo.NumberFormat,out decValue); 将在decValue中将值返回为500.85。 同样,如果用户是英语US,则更改culInfo构造函数。

有很多方法:

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test; Double.TryParse("232.23", out test)

一定要抓住……

这是一项名为Digit Grouping Symbol的新function。

脚步:

  1. 在控制面板中打开区域和语言
  2. 单击其他设置
  3. 在数字选项卡上
  4. 数字分组符号设置为自定义设置。 改变逗号; 替换为(任何字符为A到Z或{/,})。 数字分组符号= e;

例:

 string checkFormate = "123e123"; decimal outPut = 0.0M; decimal.TryParse(checkFormate, out outPut); Ans: outPut=123123;