我需要在C#中将字符串转换为小数,但此字符串具有不同的格式。
例如:
“50085”
“500,85”
“500.85”
这应该转换为小数500,85。是否有使用格式进行此转换的简化形式?
答案 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)
有很多方法:
System.Convert.ToDecimal("232.23")
Double.Parse("232.23")
double test;
Double.TryParse("232.23", out test)
确保你试着抓住......
答案 5 :(得分:1)
这是一项名为数字分组符号的新功能。
步骤:
示例:
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(".", ","));
}
}