Форматирование числа с использованием двух десятичных знаков, заполнение пробелом вместо 0 - PullRequest
3 голосов
/ 17 февраля 2011

Я ищу эффективный способ вернуть строковый формат float в javascript, который отформатирован следующим образом:

#,##0

Но я хочу иметь конечные "пробелы" вместо нулей, если нет десятичных дробей, чтобы выровнять числа следующим образом (в основном, чтобы все десятичные точки выстраивались в линию). Если у него есть конечные отступы, я могу просто выровнять по правому краю, чтобы они выровнялись правильно.

 10.12
101.3
 10

Спасибо

Ответы [ 5 ]

3 голосов
/ 17 февраля 2011
// decimal_pad(number[, length of padding[, padding character]])
// if padding parameter is null, zeros are used to pad
// if length parameter is null, no padding is applied.
function decimal_pad(dec,len,chr){
  chr = chr || '0';
  dec = dec.toString();

  if (!len) return dec;

  var p = dec.indexOf('.');
  p = (p!==-1?(dec.length-p-1):-1);

  for (var m = p; m < len; m++)
    dec += chr;

  return dec;
}

Должно соответствовать вашим потребностям.

Где:

var tests = [1,2.3,4.56,7.890];
for (var t = 0; t < tests.length; t++){
  $('#data').append(decimal_pad(tests[t],3,' ')+'\r\n');
}

Возвращает:

1____
2.3__
4.56_
7.891

(Подчеркивает как пробелы для наглядности)

2 голосов
/ 17 февраля 2011
var padTo = 2
var num = 101.3
var numAsString = num.toString()

var dotAt = numAsString.indexOf('.')
var spacesToAdd = numAsString.length - dotAt
for(i=0;i<spacesToAdd;i=i+1)
{
    numAsString = numAsString + ' '
}

Немного заржавел с Javascript, но я думаю, вы можете понять из этого.

0 голосов
/ 17 февраля 2011

Добавляет запятые и правильно устанавливает десятичную часть.

  function formatnum(n) {
    var a = ((Math.round(n*1000) / 1000) + '').split('.');
    var one = a[0];
    while (one.match(/\d{4}(,|$)/)) one = one.replace(/(\d)(\d{3})(,|$)/, "$1,$2$3");
    var two = (a[1] ? a[1] : '');
    one += (two ? '.':' ');
    while (two.length < 3) two += ' ';
    return one + two;
  }

Версия с отрицательными числами

  function formatnum(n) {
    var sig = (n < 0);
    if (sig) n = -n;
    var a = ((Math.round(n*1000) / 1000) + '').split('.');
    var one = a[0];
    while (one.match(/\d{4}(,|$)/)) one = one.replace(/(\d)(\d{3})(,|$)/, "$1,$2$3");
    var two = (a[1] ? a[1] : '');
    one += (two ? '.':' ');
    while (two.length < 3) two += ' ';
    return (sig ? '-':'') + one + two;
  }
0 голосов
/ 17 февраля 2011

Вероятно, есть более простой способ сделать это с помощью регулярных выражений, но вот моя быстрая реализация:

function number_format(num, precision)
{
     if(precision == undefined) precision = 3;
     var split = num.toFixed(precision).split('.');

     var len = split[1].length;
     var nonzero = false;
     var arr = [];
     for(var i=len-1; i>=0; i--)
     {
         var char = split[1][i];
         if(char > 0) nonzero = true;
         if(nonzero) arr.unshift(char);
         else arr.unshift(' '); // alternately: '&nbsp;'
     }

     return split[0]+'.'+arr.join('');
}


// usage
var num_string = number_format(10.25);
var num_string = number_format(10.25, 5);
0 голосов
/ 17 февраля 2011

Я бы начал с форматирования строки с завершающими нулями.Затем вы сможете применить Regex для проверки строки 0 в конце строки и заменить их пробелами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...