Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 求一个数的下一个倍数_Perl_Int_Division - Fatal编程技术网

Perl 求一个数的下一个倍数

Perl 求一个数的下一个倍数,perl,int,division,Perl,Int,Division,我想找到(给定一个可能是浮点数的数字)如何找到下一个60的倍数。 我正在做以下工作: my $nextMultiple = int($input/$constant); $nextMultiple = ((int($nextM

我想找到(给定一个可能是浮点数的数字)如何找到下一个60的倍数。
我正在做以下工作:

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

实际上我故意在最后一行加了60。有更好的方法吗?

如果希望60的倍数保持不变:

use POSIX 'ceil';

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

如果希望将60的倍数提升到下一个倍数(正如现有代码所做的那样):

次高:

 #  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的倍数。

如果数字已经是60的倍数,您想要什么值?嗯,XY问题?需要四舍五入到最接近的一分钟吗?我认为使用
int
可以与四舍五入误差相互作用,即除以60得到错误的答案,但我不再这么认为。您所拥有的一切都很好。在较低级别的语言中,我的方法(3个整数运算)将比
int
ceil
快得多,但在Perl中,这主要是在噪音中丢失的。
 #  121 =>  180    -119 => -120
 #  120 =>  180    -120 => -180
 #  119 =>  120    -121 => -180

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