将字符串转换为双精度的最佳方法是什么

时间:2018-08-15 18:36:19

标签: c# .net type-conversion

因此,存储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()转换为小数的正确方法是什么

2 个答案:

答案 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));