Группировка разрядов наоборот

Моя 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)+)
→ Ссылка