在jQuery中格式化数字

时间:2012-12-28 12:14:12

标签: javascript jquery jquery-mobile

我正在使用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

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分: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。我需要将其反转并将数组加回到字符串中。