因此,存储Price
属性应为小数,因为涉及到currecny时,最好的做法是使用小数(iirc)
我的示例在这里执行的操作是如何下载一个类似于$12.99
的字符串
我可以轻松地执行以下操作:删除该字符串的第一个索引,然后将其余部分解析为双精度,但是在此处使用此示例会使它感觉像是它的代码味道。
internal class Program
{
private static readonly List<Product> Products = new List<Product>();
private static void Main(string[] args)
{
var web = new HtmlWeb();
var doc = web.Load("https://www.petco.com/shop/en/petcostore/category/cat/cat-food/natural-cat-food");
var titles = doc.DocumentNode.SelectNodes("//*[@class = 'product-name']/a[@title]");
var prices = doc.DocumentNode.SelectNodes("//*[@class = 'product-price-promo']");
foreach (var product in titles.Zip(prices,
(t, p) => new Product {Name = t.InnerText.Trim(), Price = p.InnerText.Trim()}))
Products.Add(product);
Console.ReadLine();
}
}
产品模型很简单,只是一个名称和一个price属性(我想用十进制而不是字符串表示价格,这是这里的目标)
internal class Product
{
public string Name { get; set; }
public string Price { get; set; }
}
我的问题是,当执行这样的操作时,将p.InnerText.Trim()
转换为小数的正确方法是什么
答案 0 :(得分:3)
public static double Parse(string input){
double.Parse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.Number);
}
答案 1 :(得分:0)
decimal
类型有一个Parse
method重载,它允许您指定字符串代表货币格式的数字(这将说明货币符号和千位分隔符),因此可以执行类似的操作这个:
Price = decimal.Parse(p.InnerText.Trim(), NumberStyles.Currency));