我有一个应用程序,我将像素转换为分钟和小时。基本上使用分钟作为度量单位:
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
这不是我想要的,因为那不是实时的。
我认为问题是2像素到1分钟的比例。但是我很难把它钉死。
非常感谢任何帮助谢谢!
答案 0 :(得分:5)
Math.floor(min) % 60
代替Math.round(min % 60)
。
%
是模数运算符。对于正整数x % 60
,x
将始终产生介于0和59之间的整数值,这是您的分钟显示所需的值。你的问题是min
不是一个整数 - 正好是一半的时间,因为你是通过将整数除以2得到的。特别是,当你的像素数是119时,min
是59.5,并且Math.round()
会将其舍入到60.由于%
通常不太可能对浮点输入执行所需操作,因此正确的解决方法是在计算模数之前确保该值为整数,而不是试图在之后将其围绕。
答案 1 :(得分:1)
您使用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;
}
答案 2 :(得分:0)
你也需要
Math.round(Math.round(min) % 60)
或
Math.round(Math.floor(min) % 60)
或
Math.round(Math.ceil(min) % 60)
当你使用float时可能会给你那个错误......例如Math.round(59.5%60)