【问题标题】:Whats the best way of converting a string to a double [duplicate]将字符串转换为双精度的最佳方法是什么[重复]
【发布时间】:2025-12-07 06:40:01
【问题描述】:

因此,存储 Price 属性应该是小数,因为当涉及到货币时,最好使用小数 (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();
        }
    }

产品模型很简单,只有一个名称和一个价格属性(我想使用十进制而不是字符串来表示价格,这有点像这里的目标)

internal class Product
    {
        public string Name { get; set; }
        public string Price { get; set; }
    }

我的问题是,当做这样的事情时,将p.InnerText.Trim() 转换为小数的正确方法是什么

【问题讨论】:

    标签: c# .net type-conversion


    【解决方案1】:

    public static double Parse(string input){ double.Parse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.Number); }

    【讨论】:

      【解决方案2】:

      decimal 类型有一个Parse method 重载,允许您指定字符串表示货币格式的数字(将考虑货币符号和千位分隔符),因此可以执行以下操作:

      Price = decimal.Parse(p.InnerText.Trim(), NumberStyles.Currency));
      

      【讨论】: