我正在寻找一种有效的方法来返回javascript中的float格式的字符串格式,其格式如下:
#,##0
但是如果没有小数,我希望尾随“空格”而不是零,以便以下列方式对齐数字(基本上使小数点全部对齐)。如果它有尾随填充,我可以简单地向右对齐,使它们正确对齐。
10.12
101.3
10
谢谢,
答案 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: ' '
}
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;
}