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

434
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
Как сделать фокус при наведении

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

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

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

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

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

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

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

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

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

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

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

368