使用两位小数格式化数字,用空格填充而不是0

时间:2011-02-17 00:37:16

标签: javascript formatting

我正在寻找一种有效的方法来返回javascript中的float格式的字符串格式,其格式如下:

#,##0

但是如果没有小数,我希望尾随“空格”而不是零,以便以下列方式对齐数字(基本上使小数点全部对齐)。如果它有尾随填充,我可以简单地向右对齐,使它们正确对齐。

 10.12
101.3
 10

谢谢,

5 个答案:

答案 0 :(得分:3)

// 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

(为了可见性而将下划线作为空格)

答案 1 :(得分:2)

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有点生疏,但我认为你可以从中得到这个想法。

答案 2 :(得分:0)

我首先要使用尾随零来格式化字符串。然后你应该能够应用一个正则表达式来检查字符串末尾的0字符串,并用空格替换它们。

答案 3 :(得分:0)

使用正则表达式可能是一种更简单的方法,但这是我的快速实现:

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);

答案 4 :(得分:0)

添加逗号并正确设置小数部分。

  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;
  }