如何在 JavaScript 中将“10.99 USD”或“10,99 EUR”等价格字符串转换为数字?

问题描述 投票:0回答:1

我正在 Google Web Designer 中为 Google Ads 创建模板广告。问题在于,提要中的价格以如下格式提供价格:

  • 1,200.99 USD(最后为货币)
  • 1.200,99 欧元(西班牙语格式)
  • AED 1,200.99(前面有货币)

我正在使用 Javascript 来获取这些价格,并对价格和折扣价格进行一些数学计算,以获得折扣百分比。我面临的问题是它只适用于谷歌预览。当广告投放时,价格有时会像这样显示,没有点或任何格式

  • $120099
  • €120099
  • 120099迪拉姆

我使用的逻辑是:

  1. 替换(/[^\d.]/g, '')
  2. 数字()
  3. Intl.NumberFormat()

我觉得谷歌在投放广告之前正在更改提要中的数据。这是完整的代码:

 const frames = this.querySelectorAll('.frame')
    for (var i = 0; i < frames.length; i++) {
      const country = 'UK' //CHANGE COUNTRY HERE, use NA for AU, NL for BE_nl and FR for BE_fr
      const value = frames[i].querySelector('[data-gwd-grp-id="value"]')
      const price = frames[i].querySelector('[data-gwd-grp-id="price"]')
      const salePrice = frames[i].querySelector('[data-gwd-grp-id="sale-price"]')
      const description = frames[i].querySelector('[data-gwd-grp-id="description"]')
      const cta = frames[i].querySelector('[data-gwd-grp-id="cta"]')
      const priceNumber = Number(price.innerHTML.replace(/[^.\d]/g, ''))
      const salePriceNumber = Number(salePrice.innerHTML.replace(/[^.\d]/g, ''))
      const percentage = Math.floor(100 - ((salePriceNumber * 100) / priceNumber))
      const countries = {
        NA: {
          cta: "See Deal",
          value: `${percentage}% OFF`,
          price: `$${priceNumber}`,
          salePrice: `$${salePriceNumber}`
        },
        UK: {
          cta: "See Deal",
          value: `${percentage}% OFF`,
          price: `£${priceNumber}`,
          salePrice: `£${salePriceNumber}`
        },
        IE: {
          cta: "See Deal",
          value: `${percentage}% OFF`,
          price: `${priceNumber} €`,
          salePrice: `${salePriceNumber} €`
        },
        AE: {
          cta: "See Deal",
          value: `${percentage}% OFF`,
          price: `AED${priceNumber}`,
          salePrice: `AED${salePriceNumber}`
        },
        NL: {
          cta: "Zie deal",
          value: `${percentage}% KORTING`,
          price: `${priceNumber} €`,
          salePrice: `${salePriceNumber} €`
        },
        FR: {
          cta: "Voir l'offre",
          value: `${percentage}% Réduction`,
          price: `${priceNumber} €`,
          salePrice: `${salePriceNumber} €`
        },
        DE: {
          cta: "Siehe Deal",
          value: `${percentage}% SPAREN`,
          price: `€${priceNumber}`,
          salePrice: `€${salePriceNumber}`
        },
        IT: {
          cta: "Scopri",
          value: `${percentage}% di sconto`,
          price: `${priceNumber} €`,
          salePrice: `${salePriceNumber} €`
        },
        ES: {
          cta: "Ver oferta",
          value: `${percentage}% dto.`,
          price: `${priceNumber} €`,
          salePrice: `${salePriceNumber} €`
        },
        PL: {
          cta: "Patrz oferta",
          value: `${percentage}% ZNIŻKI`,
          price: `${priceNumber} zł`,
          salePrice: `${salePriceNumber} zł`
        }
      }
      cta.innerHTML = countries[country].cta
      price.innerHTML = countries[country].price
      salePrice.innerHTML = countries[country].salePrice
      if (percentage > 0 && percentage < 100 && price && salePrice) {
        value.innerHTML = countries[country].value
      } else {
        value.style.display = "none"
      }
      if (priceNumber === salePriceNumber) price.style.display = "none"
      if (price < 0.01) price.style.display = "none"
      if (salePriceNumber < 0.01) salePrice.style.display = "none"
      if (description.innerHTML === '') description.style.display = "none"
    }
javascript format currency price
1个回答
0
投票

使用带有

parseFloat
的正则表达式并去除逗号:

const result = ['1,200.99 USD', '1.200,99 EUR', 'AED 1,200.99'].map(str => parseFloat(str.match(/[\d,.]+/)[0].replace(',','')));
console.log(...result);

© www.soinside.com 2019 - 2024. All rights reserved.