2011-02-17 69 views
3

我正在尋找一種有效的方式,以在按以下方式格式化的JavaScript返回浮點的字符串FORMATT:格式化使用到小數點後兩位數字,填充用空間,而不是0的

#,##0 

但是,如果沒有小數以便按照以下方式排列數字(基本上使小數點全部排成一行),我想要在「空格」之後而不是零。如果它有尾部填充,我可以簡單地將它們對齊到正確的位置。

10.12 
101.3 
10 

感謝,

+0

對此深感抱歉版本,錯過了「而不是零的」的問題的一部分。 – 2011-02-17 01:11:53

回答

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

與Java語言有點生疏,但我認爲你可以從這個想法。

+1

嗨,而不是有拖尾0空白填充後。 – eli 2011-02-17 01:06:31

0

我會開始格式化字符串尾隨零。然後,您應該能夠應用正則表達式來檢查字符串末尾的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 

(下劃線空格能見度的緣故)

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); 
相關問題