Группировка разрядов наоборот
Моя JavaScript функция принимает число 10000000.0000001 и должна вернуть такую строку '10,00,00,00.000,000,1'
Ответы (2 шт):
Автор решения: Максим Н Епихин
→ Ссылка
Примитивное решение:
let str = '10000000.0000001';
let parts = str.split('.');
let leftSide = parts[0].match(/.{1,2}/g).join(',');
let rigtSide = parts[1].match(/.{1,3}/g).join(',');
let result = `${leftSide}.${rigtSide}`;
console.log(result);
Тут мы делим число на 2 части по символу точка, потом левую часть разделяем по 2 символа {1,2}, а правую по три {1,3}. .join(',') - соединяет получившийся массив в строку с разделителем запятая.
Автор решения: Qwertiy
→ Ссылка
Могу сделать одной регуляркой (впрочем, за квадрат):
function format(x) {
return (x + "").replace(/(?!^)(?<!\..*)(?=(\d\d)+(\.|$))|(?!$)(?<=\.(\d\d\d)+)/g, ",")
}
console.log(format(10000000.0000001))
console.log(format(1000000.000001))
console.log(format(12.125))
console.log(format(12.5))
console.log(format(1.5))
console.log(format(1.1))
console.log(format(1.12))
console.log(format(1.123))
console.log(format(1.1234))
console.log(format(1.12345))
console.log(format(1.123456))
console.log(format(1.1234567))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Вставляем запятые в позиции:
- ИЛИ
- И
- не начало строки
(?!^) - не после точки
(?<!\..*) - от позиции до точки или конца строки чётное количество цифр
(?=(\d\d)+(\.|$))
- не начало строки
- И
- не конец строки
(?!$) - от точки до позиции количество цифр кратно трём
(?<=\.(\d\d\d)+)
- не конец строки
- И