我正在使用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
答案 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
。我需要将其反转并将数组加回到字符串中。