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