Как сделать целочисленное деление в Perl?
что такое хороший способ всегда сделать целочисленное деление в Perl?
например, я хочу:
real / int = int
int / real = int
int / int = int
6 ответов
лексически scoped integer
ПРАГМА заставляет Perl использовать целочисленную арифметику в своей области:
print 3.0/2.1 . "\n"; # => 1.42857142857143
{
use integer;
print 3.0/2.1 . "\n"; # => 1
}
print 3.0/2.1 . "\n"; # => 1.42857142857143
int(x+.5)
круглые положительное значения к ближайшему целому числу. Округление сложнее.
чтобы повернуть к нулю:
int($x)
для решений ниже, включите следующее заявление:
use POSIX;
округлить: POSIX::floor($x)
сгонять: POSIX::ceil($x)
чтобы округлить от нуля:POSIX::floor($x) - int($x) + POSIX::ceil($x)
округлить до ближайшего целого числа: POSIX::floor($x+.5)
отметим, что int($x+.5)
неудачно для отрицательных значений. int(-2.1+.5)
и int(-1.6)
, что равно -1.
вы можете:
use integer;
это объясняется Michael Ratanapintha или же использовать вручную:
$a=3.7;
$b=2.1;
$c=int(int($a)/int($b));
обратите внимание, ' int ' не является кастингом. это функция для преобразования числа в целочисленную форму. это связано с тем, что Perl 5 не имеет отдельного целочисленного деления. исключение - когда вы "используете integer". Тогда вы потеряете настоящее разделение.