Javascript предлагает вам несколько решений для этого. Первые два приходят на ум ниже.
1. number.toLocaleString
Как уже упоминалось, .toLocaleString может помочь вам, но вместо minimumFractionDigits
используйте maximumFractionDigits
.
Как показано ниже:
number.toLocaleString(undefined, { maximumFractionDigits: 2 })
Итак, подведем итог:
const decimalsFormated = number.toLocaleString(undefined, { maximumFractionDigits: 2 })
И чем
const finalFormated = String(decimalsFormated).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
2. Number.parseFloat + toFixed
let number = 123.1234
Number.parseFloat(number).toFixed(2);
В каждом подходе оберните ваше решение в функции предпочтительно:
function getCommaSeparatedTwoDecimalsNumber(number) {
const fixedNumber = Number.parseFloat(number).toFixed(2);
return String(fixedNumber).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
Вы также можете использовать регулярные выражения. Я бы сказал, что это чрезвычайно сложно.
Также очень важно отметить, что вы можете или не хотите округлять свой окончательный результат.
Использование toLocaleString
с maxDigits просто удалит все после этих двух цифр.
Использование toFixed
будет округлять ваш вывод неправильно.
Это решение будет округлять его правильно:
Number(Math.round(1.005+'e2')+'e-2').toFixed(2);
Вставлено отсюда:
Форматировать номер, чтобы всегда отображать 2 десятичных знака
Последнее, наверное, самое важное.
В зависимости от формата входного номера вышеуказанное решение может работать или не работать. Вам необходимо определиться с форматом ввода и, если это не предусмотрено, предоставить форматеры для каждой возможности:
1000000,123124
10000123123
100000,1239
1,12039
1,19012
и т.д.
И в зависимости от формата порядок действий, которые вам нужно предпринять, может отличаться.