2013-10-03 123 views
1

我想找到(給出一個數字,可能是一個浮動)的下一個倍數如何找到的60
的倍數我做這工作如下:查找號碼

my $nextMultiple = int($input/$constant);                                   
$nextMultiple = ((int($nextMultiple/60)) * 60);                                 
$nextMultiple += 60; 

我實際上在最後一行中加了60。有沒有更好的方法呢?

+2

你想要什麼樣的價值,如果數字已經是60的倍數多? – cjm

+0

嗯,XY-問題?需要輪到最近的一分鐘? – Zaid

回答

1

如果你想60的倍數將保持不變:

use POSIX 'ceil'; 

my $next_multiple = ceil(($input/$constant)/60) * 60; 

如果你想60的倍數被顛簸到下一個倍數(如現有的代碼一樣):

use POSIX 'floor'; 

my $next_multiple = (1 + floor(($input/$constant)/60)) * 60; 
1

接下來最高:

# 121 => 180 -119 => -60 
# 120 => 180 -120 => -60 
# 119 => 120 -121 => -120 

$n - ($n % 60) + 60 

下一個最大的:

# 121 => 180 -119 => -120 
# 120 => 180 -120 => -180 
# 119 => 120 -121 => -180 

$n + ($n >= 0 ? +1 : -1) * (60 - (abs($n) % 60)) 

$n % 60 == 0會告訴你,如果$ n爲60。

+0

我以爲使用'int'可能會與舍入誤差相互影響60除以給出錯誤的答案,但我不再相信。你有什麼是好的。 – ikegami

+0

在較低級別的語言中,我的方法(3個整數運算)將比'int'或'ceil'快得多,但這大部分都會在Perl中丟失。 – ikegami