将像素转换为分钟

4

我有一个应用程序,可以将像素转换为分钟和小时。基本上使用分钟作为度量单位,如下所示:

120分钟 = 240像素

我将其通过以下函数运行:

convertToTime: function (min) {
    var hours = Math.floor( min / 60);          
    var minutes = Math.round(min % 60);
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (hours > 12) {
        hours = hours % 12;
    }
    return hours + ":" + minutes;
}

除了分钟数达到60时,它会正确返回一切。例如,它会返回:
12:58 12:59 12:60
这不是我想要的,因为那不是真实时间。
我认为问题在于每两个像素代表一分钟的比率。但我很难解决这个问题。
非常感谢任何帮助!

哦...你输入的是什么?在我看来没问题。http://jsfiddle.net/mnbayazit/j8CbY/ 尽管 Math.round 看起来有些多余,如果 min 总是整数的话。 - mpen
3个回答

5
请用以下方式翻译:

使用 Math.floor(min) % 60 代替 Math.round(min % 60)

% 是模数运算符。对于正整数的 xx % 60 将始终产生介于 0 和 59(含)之间的整数值,这正是你想要的分钟显示结果。问题在于,min 不是整数——因为一半的时间,它是通过将整数除以 2 来获得的。特别地,当像素计数为 119 时,min 是 59.5,而 Math.round() 将其四舍五入为 60。由于对于浮点数输入而言,% 不太可能按照你所期望的方式工作,因此正确的解决方案是,在计算其模数之前确保该值为整数,而不是尝试在之后进行四舍五入。


2
你在计算小时数时使用了Math.floor函数,但是在计算分钟数时却使用了Math.round函数。你可以使用Math.floor函数来计算两者的值,这样就可以解决你的问题了!
convertToTime: function (min) {
    var hours = Math.floor( min / 60);          
    var minutes = Math.floor(min % 60);
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (hours > 12) {
        hours = hours % 12;
    }
    return hours + ":" + minutes;
}

0

你需要做的是

Math.round(Math.round(min) % 60)

或者

Math.round(Math.floor(min) % 60)

或者

Math.round(Math.ceil(min) % 60)

当你使用浮点数时可能会出现这个错误...例如Math.round(59.5 % 60)


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