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
Vous pouvez lancer des ints en Perl:
int(5/1.5) = 3;
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
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.
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.
Esperons que ça marche
int (9/4) = 2.
Merci Manojkumar