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

时间:2011-05-11 11:16:13

标签: c# string decimal

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

例如:

“50085”

“500,85”

“500.85”

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

7 个答案:

答案 0 :(得分:16)

虽然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;
}

答案 1 :(得分:16)

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

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

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

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

答案 2 :(得分:6)

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

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

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

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

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

答案 3 :(得分:3)

请尝试以下代码:

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构造函数。

答案 4 :(得分:1)

有很多方法:

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test; Double.TryParse("232.23", out test)
  4. 确保你试着抓住......

答案 5 :(得分:1)

这是一项名为数字分组符号的新功能。

步骤:

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

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

答案 6 :(得分:0)

尝试一下

 public decimal AutoParse(string value)
    {
        if (Convert.ToDecimal("3.3") == ((decimal)3.3))
        {
            return Convert.ToDecimal(value.Replace(",", "."));
        }
        else
        {
            return Convert.ToDecimal(value.Replace(".", ","));
        }

    }