0

Phonegap と JQuery Mobile を使用してアプリを作成していますが、特定のカウンターをフォーマットする必要がある特定のシナリオがあります。

基本的に、カウンターは 1 から始まり、移動距離を示して増加し続けます。ただし、表示するには、0001 として表示する必要があり、イベントがトリガーされると、0002 .... 0099... 0999... 9999 (最大) になります。

問題は、移動距離が 1 キロ未満の場合、小数点を表示する必要があることです。したがって、表示できるのは 4 桁に限られているため、距離を 0.250KM (250m に相当) として表示する必要があります。

数値が 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
4

2 に答える 2

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';
于 2012-12-28T12:21:52.313 に答える
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. それを逆にして、配列を結合して文字列に戻す必要があります。

于 2012-12-28T12:27:28.740 に答える