2011-09-26 146 views
3

我有一个应用程序,我将像素转换为分钟和小时。基本上使用分钟作为测量单位为这样:将像素转换为分钟

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

呃......你有什么输入?对我来说看起来很好。 http://jsfiddle.net/mnbayazit/j8CbY/虽然'Math.round'似乎不需要'min',但总是一个int。 – mpen

回答

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; 
} 
5

Math.floor(min) % 60而不是Math.round(min % 60)

%是模数运算符。 x % 60将始终产生一个介于0和59之间的整数值,用于正整数x,这是您希望用于分钟显示的值。你的问题是,min不是一个整数 - 正好是整数的一半,因为你通过将整数除以2来得到它。特别是,当你的像素数为119时,min为59.5,并且Math.round()将取整为60。由于%不可能完成浮点输入所需的任何操作,因此正确的解决方案是在计算其模数之前确保该值为整数,而不是之后尝试对其进行舍入。

0

你需要做太多

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

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

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

当您使用浮动可能会给你的错误......例如Math.round(59.5 %60)