Аналог функции number_format в JS?

437
15 ноября 2017, 01:00

В PHP есть number_format. Какой аналог есть в JS/jQuery?

Answer 1

Полного аналога, наверное, нет.

Есть возможность вывести число в соответствии с настройками локали:

console.log( 
  Number((-12345.6789).toFixed(2)).toLocaleString(), 
  (-12345.6789).toLocaleString('en-US', {maximumFractionDigits: 2}), 
); 
// Или (новый API) 
console.log( 
  new Intl.NumberFormat().format(Number(-12345.6789.toFixed(2))), 
  new Intl.NumberFormat('en-US', {maximumFractionDigits: 2}).format(-12345.6789), 
);

Также несложно реализовать number_format с помощью toFixed, хотя во многих случаях решения выше может быть достаточно.

Посмотрим сигнатуру функции на php.net: number_format

string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )

Реализация:

function number_format( number, decimals = 0, dec_point = '.', thousands_sep = ',' ) { 
 
  let sign = number < 0 ? '-' : ''; 
 
let s_number = Math.abs(parseInt(number = (+number || 0).toFixed(decimals))) + ""; 
  let len = s_number.length; 
  let tchunk = len > 3 ? len % 3 : 0; 
 
  let ch_first = (tchunk ? s_number.substr(0, tchunk) + thousands_sep : ''); 
  let ch_rest = s_number.substr(tchunk) 
    .replace(/(\d\d\d)(?=\d)/g, '$1' + thousands_sep); 
  let ch_last = decimals ? 
    dec_point + (Math.abs(number) - s_number) 
      .toFixed(decimals) 
      .slice(2) : 
    ''; 
 
  return sign + ch_first + ch_rest + ch_last; 
} 
 
 
console.log(number_format(-123.5678, 2, '.', ' ')); 
console.log(number_format(-1234.5678, 2, '.', ' ')); 
console.log(number_format(-12345.5678, 2, '.', ' ')); 
console.log(number_format(12345.5678, 2, '.', ' '));

READ ALSO
Как сделать фокус при наведении

Как сделать фокус при наведении

При наведении на ссылку из главного меню, загорается подсветка, но при отведения мыши от этой ссылки подсветка исчезаетКак сделать так что...

412
Как выбрать потомков от родителя в jQuery?

Как выбрать потомков от родителя в jQuery?

Подскажите, пожалуйста самый простой способ выбрать 3-х потомков от одинаковых родителейПриведу пример

415
Отцентрировать текст на изображении

Отцентрировать текст на изображении

ПриветНе могу понять как сделать так, чтобы поверх изображения отцентрировать текст относительно самого изображения, чтобы при ресайзе...

364
Как сверстать такую страницу?

Как сверстать такую страницу?

Собственно, как грамотно сверстать подобную страницу? Проблема в том, что макет резиновый, и чёрная пунктирная линия идёт по высоте всей страницы...

372