将网站的价格转换为没有小数的数字

时间:2017-09-08 13:42:17

标签: javascript jquery regex price

我有一个系统可以读取没有小数的价格。

示例:2890 = $ 28.90

我还有一个系统可以获得产品的网站价格,结果是从40.25美元到40美元(没有小数位)。我很可能需要一个正则表达式或一个使用javaScript或jQuery的函数,它可以将$ 40.25转换为4025或40到4000.因为我需要将第二个系统的返回号码发送到第一个系统,只有数字除外小数位。

我原本以为我有这个:item.price = Number(item.price.replace(/[^0-9\.-]+/g,"")*100);其中item.price在这种情况下等于$ 79.99但我得到的结果为7998.99999999而不是7999这是我需要的东西我可以&# 39; t有那些小数位,所以parseFloat不是一个选项。非常感谢帮助!

3 个答案:

答案 0 :(得分:0)

不要重新发明轮子,使用图书馆!试试https://www.npmjs.com/package/parse-currency

import parseCurrency from 'parse-currency'

const foo = parseCurrency('$10.50')
console.log(foo) // 10.5 

const bar = parseCurrency('$1,000,000.25')
console.log(bar) // 1000000.25 

答案 1 :(得分:0)

正如Duncan所提到的那样,解析货币库就是这样,但对你的问题来说还不够。让我们发挥更好的作用......

function parseCurrency(amount) {
    var number = amount.replace(/[^\d|\.]/g, ''); // Removes everything that's not a digit or a dot
    var parsedToFloat = parseFloat(Math.round(number * 100) / 100); // Make a float number even it is an integer

    return parsedToFloat.toFixed(2); // Now make sure that it will have always 2 decimal places
}

// This will return the following results...
parseCurrency('$40');        // "40.00"
parseCurrency('$40.25');     // "40.25"
parseCurrency('$40,000.25'); // "40000.25"

答案 2 :(得分:0)

当你要求一个不能修复的数字时,你可以这样做:

const currencies = [
  '$40',
  '$45.25',
  '$45.251123456789',
  '$1,000',
  '$1,000.25'
];

function convertToNumber(currency) {
  const number = currency.replace(/[^\d|\.]/g, '');
  return parseFloat(parseFloat(number).toFixed(2)) * 100;
}

console.log(currencies.map(convertToNumber))