2012-12-28 46 views
0

我正在用Phonegap和JQuery Mobile創建一個應用程序,並且需要格式化特定計數器的特定場景。jQuery中的格式編號

基本上計數器從1開始並且持續增加以顯示行進的距離。但是,爲了顯示它,我需要將它們顯示爲0001,然後一旦事件被觸發,它就進入0002 ... 0099 ... 0999 ... 9999(最大)。

問題是,當行駛距離小於1KM時,我需要顯示小數點。因此,由於我限於顯示4位數字,因此我需要顯示距離爲: 0.250KM(相當於250米)。

誰能告訴我怎樣才能做到這一點,這樣一旦數小於1,它顯示爲例如0.005 0.025,然後,然後0.250,直到達到0.999,然後它會輪0001

目前,我有這個設置:

var newDist = Math.round((geoLocationHandler.distance/1000)); // shows distance in KM 
var distance = parseInt($('.distanceTravelled').text(), 10); 
$('.distanceTravelled').text(("000"+ (distance+newDist)).slice(-4)); 

和HTML

<span class="distanceTravelled">0000</span>km 

回答

2

試試這個:

function padNumber(number, padding, length) { 
    var string = (Math.round(number * 1000)/1000)+ ''; 
    if(number < 1 && number != 0){ 
     while (string.length <= length){ 
      string += padding; 
     } 
    } else { 
     while (string.length < length){ 
      string = padding + string; 
     } 
    } 
    return string; 
} 

padNumber(0.23, 0, 4); 
//"0.230"; 
padNumber(23, 0, 4); 
//"0023"; 
padNumber(23.5, 0, 4) 
//"0024" 
padNumber(0.95512154, 0, 4) 
//"0.950" 

請記住,這並不會添加'KM'後綴。你可以做到這一點與:

return string + 'KM'; 
+0

請降低我的人請解釋爲什麼?如果我犯了一個錯誤,我想從中吸取教訓。 – Cerbrus

+0

0表示5位數! –

+0

@AspiringAqib:固定。 – Cerbrus

0

這太瘋狂了,但工程:

var a = .999; 

function padder(a) { 
    var hasDecimal = $.inArray('.', a.toString().split('')) !== -1, 
     b = (hasDecimal ? a.toFixed(3): a.toString()).split(''), 
     zeros = hasDecimal ? '00000' : '0000'; 

    return $.map(zeros.split(''), function (i) { 
     return b.pop() || i; 
    }).reverse().join(''); 
} 

reverse()用於固定的pop()行動。我使用pop來保證我是數組開頭最右邊的數字。所以,「.250」會變成-> 0, 5, 2, ., 0。我需要將其反向並將數組加回到一個字符串中。

+0

那裏正在執行什麼「reverse()」?我正在查看代碼,並試圖弄清楚下半年的情況。你可以試着解釋一下嗎? – Cerbrus

+0

@Joe對不起,但我認爲自己是一個N00B,當涉及到這樣複雜的東西。所以我認爲var'a'會等同於我的'newDist',但是我怎樣才能將值輸出到$('。distanceTravelled')? – user1809790

+0

它與我的函數相同:'('('。distanceTravelled')。text(padder(newDist)+'KM');'(除了我的情況,函數被稱爲'padNumber') – Cerbrus