使用货币代码对数字进行数字格式化

时间:2019-06-04 16:38:20

标签: javascript node.js

我想将字符串重新格式化为数字 如果使用美元,则所有内容都可以从带有会计库的包装箱中获得,但是例如对于俄罗斯卢布,则失败。 字符串示例为1,00 руб. (RUB)$20.00 (USD) 因此,我可以解析这些字符串并获取货币代码(以防万一我可能需要将其提供给库),例如以下代码:

我尝试过会计和数字图书馆

// getting currency code
let init = (data.orderAmount).indexOf('(')
let fin = (data.orderAmount).indexOf(')')
console.log(data.orderAmount).substr(init + 1, fin - init - 1)

例如,如果我将1,00 руб. (RUB)传递到accounting.unformat,我将得到100而不是1,但对于usd示例,它将起作用并且结果将产生20 。与numbro相同的结果,在这种情况下,只需要删除()中的部分即可。

我真正想要的是解决方案,我可以传递货币代码和字符串,并从字符串中获取给定货币的正确数字。

我尝试全球化库numberParsercurrencyFormatter,但没有成功

3 个答案:

答案 0 :(得分:0)

let text_1 = '1,00 руб. (RUB)';
let text_2 = '$20.00 (USD)';

console.log( text_1.match(/\d+(\,|\.)/g)[0].replace(/\,|\./g, '') )
console.log( text_2.match(/\d+(\,|\.)/g)[0].replace(/\,|\./g, '') )

您可以尝试使用此代码吗?它匹配数字直到.,并替换它们。

答案 1 :(得分:0)

function reverseFormatNumber(val,locale){
        var group = new Intl.NumberFormat(locale).format(1111).replace(/1/g, '');
        var decimal = new Intl.NumberFormat(locale).format(1.1).replace(/1/g, '');
        var reversedVal = val.replace(new RegExp('\\' + group, 'g'), '');
        reversedVal = reversedVal.replace(new RegExp('\\' + decimal, 'g'), '.');
        return Number.isNaN(reversedVal)?0:reversedVal;
    }

console.log(reverseFormatNumber('1,00','ru'));```

仍然需要从1,00 руб. (RUB)字符串中截取一部分,但这应该不是问题

答案 2 :(得分:0)

看到您的必要性,我可以提出一些更详细的内容。代码以根据您输入的货币设置货币格式

const data = [{
  'orderAmount': '1,00 руб. (RUB)'
}, { 
  'orderAmount': '$20.00 (USD)'
}]

const getCurrency = (abbr) => {
  const enumerable = {
    rub: 'ru-RU',
    usd: 'en-US'
  } 
  try {
    return enumerable[abbr.toLowerCase().substr(1,3)]
  } catch {
    throw new Error ('Invalid currency')
  }
}

const getCurrencyCode = (abbr) => abbr.toUpperCase().substr(1,3)

const sanitizeCurrency = (value) => {
  const sanitized = value.replace(',','.').match(/\d+/g).join('.')
  return Number(sanitized);
}


const currency = data.map(item => {
  const newItem = item.orderAmount.split(' ');
  const options = { 
      style: 'currency',
      currency: getCurrencyCode(newItem[newItem.length - 1]),
    };
  const numeralFormat = new Intl.NumberFormat(
    getCurrency(newItem[newItem.length - 1]),
    options
  )

  return numeralFormat.format(sanitizeCurrency(newItem[0]))
})

console.log(currency)

如果您想玩它Boxy Types: Inference for Higher-rank Types and Impredicativity