javascript, форматирование цифр, float, number, string, fixed format
|
Форматирование чисел средствами javascript
Javascript и форматирование чисел решаем извечную проблему раз и навсегда одной функцией.
Прибираясь в очередной раз в своих кодах перед стартом проекта orion5.ru наткнулся на проблему с форматированием дробных и целых чисел. В свое время я решал, эту проблему, но в ограниченном варианте. В этот раз, используя случай, решил полностью раз и навсегда закрыть этот вопрос.
Цели:
- Корректное отображение цифр после точки в дробной части
- Корректное отображение разрядов в числе
- Легкость вызова
Вот что получилось
Пример кода
// _____________________________________________________________________________
// Преобразует число в строку формата 1_separator000_separator000._decimal
function sdf_FTS(_number,_decimal,_separator)
// сокращение переводится как Float To String
// sd_ - понятно и так почему :)
// _number - число любое, целое или дробное не важно
// _decimal - число знаков после запятой
// _separator - разделитель разрядов
{
// определяем, количество знаков после точки, по умолчанию выставляется 2 знака
var decimal=(typeof(_decimal)!='undefined')?_decimal:2;
// определяем, какой будет сепаратор [он же разделитель] между разрядами
var separator=(typeof(_separator)!='undefined')?_separator:'';
// преобразовываем входящий параметр к дробному числу, на всяк случай, если вдруг
// входящий параметр будет не корректным
var r=parseFloat(_number)
// так как в javascript нет функции для фиксации дробной части после точки
// то выполняем своеобразный fix
var exp10=Math.pow(10,decimal);// приводим к правильному множителю
r=Math.round(r*exp10)/exp10;// округляем до необходимого числа знаков после запятой
// преобразуем к строгому, фиксированному формату, так как в случае вывода целого числа
// нули отбрасываются не корректно, то есть целое число должно
// отображаться 1.00, а не 1
rr=Number(r).toFixed(decimal).toString().split('.');
// разделяем разряды в больших числах, если это необходимо
// то есть, 1000 превращаем 1 000
b=rr[0].replace(/(\d{1,3}(?=(\d{3})+(?:\.\d|\b)))/g,"\$1"+separator);
r=b+'.'+rr[1];
return r;// возвращаем результат
}
Подробнее можно посмотреть рабочий пример по ссылке.