我正在尋找一種有效的方式,以在按以下方式格式化的JavaScript返回浮點的字符串FORMATT:格式化使用到小數點後兩位數字,填充用空間,而不是0的
#,##0
但是,如果沒有小數以便按照以下方式排列數字(基本上使小數點全部排成一行),我想要在「空格」之後而不是零。如果它有尾部填充,我可以簡單地將它們對齊到正確的位置。
10.12
101.3
10
感謝,
我正在尋找一種有效的方式,以在按以下方式格式化的JavaScript返回浮點的字符串FORMATT:格式化使用到小數點後兩位數字,填充用空間,而不是0的
#,##0
但是,如果沒有小數以便按照以下方式排列數字(基本上使小數點全部排成一行),我想要在「空格」之後而不是零。如果它有尾部填充,我可以簡單地將它們對齊到正確的位置。
10.12
101.3
10
感謝,
是否添加逗號並正確設置小數部分。
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;
}
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 + ' '
}
與Java語言有點生疏,但我認爲你可以從這個想法。
嗨,而不是有拖尾0空白填充後。 – eli 2011-02-17 01:06:31
我會開始格式化字符串與尾隨零。然後,您應該能夠應用正則表達式來檢查字符串末尾的0字符串,並將其替換爲空格。
// 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
(下劃線空格能見度的緣故)
有可能與正則表達式來做到這一點更簡單的方法,但這裏是我的快速實施:
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);
對此深感抱歉版本,錯過了「而不是零的」的問題的一部分。 – 2011-02-17 01:11:53