我正在为我正在制作的小型网络应用创建自己的自定义TimeObject
课程。
这里我定义了一个函数来获取有效范围,整数毫秒,以便实例化TimeObject
,如下所示:
TimeObject.prototype.millisecondsToTime = function(mm) {
function valid() {
if(parseInt(mm,10) >= 0 && parseInt(mm,10) <= 359999999) return true;
}
if(valid()) {
var h = Math.floor(mm/3600000);
var m = Math.floor(((mm/3600000)-h)*60);
var s = Math.floor(((((mm/3600000)-h)*60)-m)*60);
var mmFinal = Math.floor(((((((mm/3600000)-h)*60)-m)*60)-s)*1000);
this.hours = h,
this.minutes = m;
this.seconds = s;
this.milliseconds = mmFinal;
} else {
this.hours = 0,
this.minutes = 0;
this.seconds = 0;
this.milliseconds = 0;
}
}
除了2 ^ x:
的值外,它似乎工作正常// 2^0 = 1 -> returns 0, should return 1
// 2^1 = 2 -> returns 1, should return 2
// 2^2 = 4 -> returns 3, should return 4
// 2^3 = 8 -> returns 7, should return 8
// And so on...
1001
,1003
,而非1002
和1004
等值分别以milliseconds
和0
的形式返回2
。他们应该将1
和3
作为milliseconds
值返回,但不会。
我知道这是一个逻辑错误,但是这里发生了什么以及如何更正我的代码?
答案 0 :(得分:1)
首先尝试从计时器中减去较小的元素,逐步删除最小单位,然后除以该单位中的值数。
this.milliseconds = mm % 1000;
mm = (mm - this.milliseconds) / 1000; // mm is now measured in whole seconds
this.seconds = mm % 60;
mm = (mm - this.seconds) / 60; // mm is now measured in whole minutes
this.minutes = mm % 60;
mm = (mm - this.minutes) / 60; // mm is now measured in whole hours
this.hours = mm;
等。这样可以避免在计算中出现任何非整数数字。