0

我正在使用 Phonegap 和 JQuery Mobile 创建一个应用程序,并且有一个需要格式化特定计数器的特定场景。

基本上,计数器从 1 开始并不断增加,显示行进的距离。但是,为了显示它,我需要将它们显示为 0001,然后一旦触发事件,它将转到 0002 .... 0099 ... 0999 ... 9999(最大)。

问题是当行驶距离小于1KM时,我需要显示小数点。因此,由于我仅限于显示 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 回答