Convert.ToDecimal 不适用于字符串“9.02”

Joh*_*n V -1 c# string decimal type-conversion

我将整个应用程序从“浮动”更改为十进制,但有一点,我无法解决此问题:

string a="9.02"

decimal d=Convert.ToDecimal(a);
Run Code Online (Sandbox Code Playgroud)

它抛出一个异常,incorrect input string format。为什么?

Son*_*nül 5

Convert.ToDecimal(string)方法CurrentCulture默认使用。这里是如何实现的

public static decimal ToDecimal(String value)
{
   if (value == null)
       return 0m;
   return Decimal.Parse(value, CultureInfo.CurrentCulture);
}
Run Code Online (Sandbox Code Playgroud)

可能您CurrentCultureNumberDecimalSeparator属性不是.,这就是此方法抛出的原因FormatException

作为替代方案,你可以使用InvariantCulture(它是NumberDecimalSeparator.)在你的第二个参数Convert.ToDecimal(String, IFormatProvider)的方法,也可以CloneCurrentCulture并设置它的NumberDecimalSeparatorPROPERT打点。

string a = "9.02";
decimal d = Convert.ToDecimal(a, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

或者

string a = "9.02";
var clone = (CultureInfo)CultureInfo.CurrentCulture.Clone();
clone.NumberFormat.NumberDecimalSeparator = ".";
decimal d = Convert.ToDecimal(a, clone);
Run Code Online (Sandbox Code Playgroud)