我需要在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)
这将有效,具体取决于您的文化设置:
string s = "500.85";
decimal d = decimal.Parse(s);
Run Code Online (Sandbox Code Playgroud)
如果您的文化不是默认允许,而不是.小数点,您可能需要:
s = s.Replace(',','.');
Run Code Online (Sandbox Code Playgroud)
但是需要检查多个.......这似乎归结为更多的输入消毒问题.如果您能够验证并清理所有符合一组规则的输入,则转换为十进制将更容易.
尝试下面的代码:
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 构造函数。
| 归档时间: |
|
| 查看次数: |
73723 次 |
| 最近记录: |