web-dev-qa-db-fra.com

Comment dois-je faire la division entière en Perl?

Quelle est la bonne façon de toujours faire une division entière en Perl?

Par exemple, je veux:

real / int = int

int / real = int

int / int = int
55
Bryan Denny

Vous pouvez lancer des ints en Perl:

int(5/1.5) = 3;
42
Bryan Denny

La portée lexicale integer pragma force Perl à utiliser l'arithmétique entière dans sa portée:

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
83
Michael Ratanapintha

int(x+.5) arrondira les valeurs positives vers l'entier le plus proche. Arrondir est plus difficile.

Pour arrondir vers zéro:

int($x)

Pour les solutions ci-dessous, incluez la déclaration suivante:

use POSIX;

Pour arrondir vers le bas: POSIX::floor($x)

Pour arrondir: POSIX::ceil($x)

Pour arrondir à zéro: POSIX::floor($x) - int($x) + POSIX::ceil($x)

Pour arrondir à l'entier le plus proche: POSIX::floor($x+.5)

Notez que int($x+.5) échoue gravement pour les valeurs négatives. int(-2.1+.5) est int(-1.6), qui est -1.

5
Steve Schaefer

vous pouvez:

use integer;

il est expliqué par Michael Ratanapintha ou bien utiliser manuellement:

$a=3.7;
$b=2.1;

$c=int(int($a)/int($b));

remarquez, 'int' ne fait pas de casting. c'est une fonction pour convertir un nombre en une forme entière. c'est parce que Perl 5 n'a pas de division entière séparée. l'exception est lorsque vous "utilisez un entier". Ensuite, vous perdrez une véritable division.

4
Znik

Esperons que ça marche

int (9/4) = 2.

Merci Manojkumar

0
Manoj Kumar