2011-09-26 79 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)