Javascript:Math.floor不按预期工作

3
function TimeConvert(num) {
    for (i = 0; i < num; i+= 60) {
        if (num % 60 < 60) {
            var hours = Math.floor(i / 60);
            if (hours == 0) {
                var minutes = num % 60;
            } else {
                minutes = num % (60 * hours);
            }
        }
    }
    return hours + ":" + minutes;
}

当我调用TimeConvert(60)时,它返回的是0:0而不是1:0...为什么?在这种情况下,我是否需要添加一个条件来检查num % 60 == 0

你尝试使用调试器跟踪代码了吗? - John Dvorak
2
如果num是数值型且有限的,那么num % 60 < 60始终成立。 - John Dvorak
是的,当我调用TimeConvert(126)时它可以工作,例如返回2:6。但是当我调用TimeConvert(120)时,它返回1:0而不是2:0。 - bard
跟踪导致错误的值 - John Dvorak
1
你的条件是小于你的数字;试着将它改为小于等于。 - dennythecoder
2个回答

5
为什么需要进行迭代?
function TimeConvert(num) {
    var hours   = Math.floor( num / 60 );
    var minutes = num % 60;
    //minutes = minutes < 10 ? '0'+minutes:minutes
    return hours + ":" + minutes;
}

FIDDLE


如果我理解正确,OP不想将分钟格式化为两位数。 - John Dvorak
@JanDvorak - 只需删除那行代码即可! - adeneo
这个完美地运作了,谢谢!你说得对,我必须停止总是考虑迭代的方式。 - bard

3
问题出在 i < num 上,应该改为 i <= num。 你的 for 只会被执行一次,因为接下来的步骤中,i 值会增加 60,使得 i < num 变成了 false。
而且,整个函数本来就应该变成这样:
function TimeConvert(num) {
    var hours = Math.floor(num / 60);
    var minutes = num % 60;
    return hours + ":" + minutes;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接