我需要将字符串转换为C#中的小数,但此字符串具有不同的格式。将字符串转换为格式为
例如:
“50085”
“500,85”
“500.85”
这应该是十进制转换为500,85。是否有一个简化的形式来使用格式来做这个转换?
我需要将字符串转换为C#中的小数,但此字符串具有不同的格式。将字符串转换为格式为
例如:
“50085”
“500,85”
“500.85”
这应该是十进制转换为500,85。是否有一个简化的形式来使用格式来做这个转换?
虽然decimal.Parse( )是th你正在寻找的方法,你将不得不提供更多的信息。它不会自动选择你给出的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;
}
我没有找到任何格式来解决我的问题。 我使用这个实现并添加小数位。 谢谢 – 2011-05-12 20:11:03
这将工作,这取决于你的文化设置:
string s = "500.85";
decimal d = decimal.Parse(s);
如果你的文化不被默认允许,
而不是.
作为一个小数点,你可能需要:
s = s.Replace(',','.');
但是需要检查多个.
......这似乎归结为更多的投入消毒问题。如果您能够验证和消毒输入以符合一系列规则,则转换为十进制将更容易。
+1用于提及输入消毒... -1用于不处理“50085”。平衡到没有投票:) – 2011-05-11 11:40:25
我担心也可能有一个输入像'50.865,85' – V4Vendetta 2011-05-11 11:53:36
@Chris,50085会导致50085后decimal.Parse ...我会接受没有投票,虽然我不接受我认为这完全回答了OP的问题。 :) – Jaymz 2011-05-11 12:03:00
有许多方法:
System.Convert.ToDecimal("232.23")
Double.Parse("232.23")
double test;
Double.TryParse("232.23", out test)
确保你试图赶上...
有些文化用一个逗号来表示浮点。你可以用一个aspx页面上下面的代码测试:
var x = decimal.Parse("500,85");
Response.Write(x + (decimal)0.15);
这给出了答案501当线程文化已被设置为使用逗号作为浮点文化。您可以强制使用像这样:
var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," });
试试下面这段代码:
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。同样,如果用户是英语美国人,然后更改culInfo构造函数。
这是一个新功能,称为数字分组符号。
步骤:
实施例:
string checkFormate = "123e123";
decimal outPut = 0.0M;
decimal.TryParse(checkFormate, out outPut);
Ans: outPut=123123;
十进制不以 “500,85” 的格式存储。你在问一对小数吗? – 2011-05-11 11:19:35
@myermian:嗯,它可以,这取决于你的文化/区域设置。不是每个人都以相同的方式表示小数值。在这个例子中,'500,85'可能相当于'500.85'。 – 2011-05-11 11:36:53
在你的字符串中可能是'50.865,85'吗? – V4Vendetta 2011-05-11 11:54:33