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

Dan*_*ior 8 c# string decimal

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

例如:

"50085"

"500,85"

"500.85"

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

Chr*_*fer 17

虽然decimal.Parse()是您要查找的方法,但您必须向其提供更多信息.它不会自动在您提供的3种格式之间进行选择,您必须告诉它您期望的格式(以IFormatProvider的形式).请注意,即使使用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;
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ack 17

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

var x = decimal.Parse("500,85");
Response.Write(x + (decimal)0.15);
Run Code Online (Sandbox Code Playgroud)

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

var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," });
Run Code Online (Sandbox Code Playgroud)


Jay*_*ymz 6

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

string s = "500.85";
decimal d = decimal.Parse(s);
Run Code Online (Sandbox Code Playgroud)

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

s = s.Replace(',','.');
Run Code Online (Sandbox Code Playgroud)

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


Nis*_*Roy 5

尝试下面的代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

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