感谢您抽出宝贵时间协助解决我的问题。
在我正在编写的代码中,我正在遍历一个表,我得到了适当的值(使用调试器确认它),我之前将它们解析为适当的类型,最后我将它们添加到一个对象中被序列化为XML。
然而,我遇到了一个问题,那就是我似乎无法找到将字符串解析为十进制值的方法。看看:
if (DateTime.TryParse(dateString, culture, styles, out date))
{
decimal LastValue;
string vrednost = String.Format("{0:0,0.0}",
row.SelectSingleNode("td[2]").InnerText);
if (Decimal.TryParse(vrednost, out LastValue))
list.Add(new StockEntry
{
Date = date,
PoslednaCena = LastValue
...
}
请注意,vrednost的值是4.451,00,我怀疑如果我将它转换为4,451.00,它将被解析。
我已成功将日期解析为适当的日期时间值。但是,LastValue的值始终为0.我已经耗尽了我所知道的所有资源。你知道如何解决我的问题吗?
提前谢谢!
答案 0 :(得分:1)
此格式化不会执行任何操作,因为您无法格式化此类字符串。您必须使用带有其他参数的parse方法并指定您自己的格式
string s2 = "4.451,00";
NumberFormatInfo numberFormatInfo = new NumberFormatInfo();
numberFormatInfo.NumberDecimalSeparator = ",";
numberFormatInfo.NumberGroupSeparator = ".";
var d = decimal.Parse(s2, numberFormatInfo);
答案 1 :(得分:0)
我认为您的问题可能是由于用于解析的文化。尝试使用CultureInfo.InvariantCulture进行解析。它应该使用“,”作为千位分隔符和“。”作为小数点分隔符。
Decimal.TryParse(vrednost, NumberStyles.Number, CultureInfo.InvariantCulture, out LastValue);
如果你想交换它们,你可以使用另一种文化。例如,意大利语适用于您的格式(不确定其他格式),因此您的“4.451,00”代码将如下所示:
Decimal.TryParse(vrednost, NumberStyles.Number, CultureInfo.GetCultureInfo("it"), out LastValue);
如果您想使用自定义文化而不是强制实现您想要的文化,您可以简单地创建NumberFormatInfo类并将其传递给parse方法。
NumberFormatInfo decimalNumber = new NumberFormatInfo();
decimalNumber.NumberDecimalSeparator = ",";
decimalNumber.NumberGroupSeparator = ".";
Decimal.TryParse(vrednost, NumberStyles.Number, decimalNumber, out LastValue);
答案 2 :(得分:0)
你的 row.SelectSingleNode(" td [2]")。InnerText 是一个字符串,你试图像小数一样格式化它
尝试直接解析它:
decimal LastValue;
string vrednost = row.SelectSingleNode("td[2]").InnerText;
if (Decimal.TryParse(vrednost, out LastValue))
首先检查您的cultureinfo并正确设置。
CultureInfo MyUsersCulture = Thread.CurrentThread.CurrentCulture;
Console.WriteLine("The culture: "+ MyUsersCulture.Name);
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
ConsoleWriteLine("The culture: " + Thread.CurrentThread.CurrentCulture);