Quel est un bon moyen de toujours faire division entière en Perl?Comment faire une division entière en Perl?
Par exemple, je veux:
real/int = int
int/real = int
int/int = int
Quel est un bon moyen de toujours faire division entière en Perl?Comment faire une division entière en Perl?
Par exemple, je veux:
real/int = int
int/real = int
int/int = int
Vous pouvez lancer ints en Perl:
int(5/1.5) = 3;
Le lexicalement SCOPED integer
pragma forces Perl pour utiliser l'arithmétique entier dans son champ d'application:
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
Informations supplémentaires, les parenthèses séparent 'utiliser entier' à l'intérieur du bloc, puis à l'extérieur du bloc, sera utilisé le calcul réel standard à la fois avant et après le bloc. – Znik
int(x+.5)
tournera positif valeurs vers l'entier le plus proche. Arrondir est plus difficile.
Pour arrondir vers zéro:
int($x)
Pour les solutions ci-dessous, comprennent la déclaration suivante:
use POSIX;
Pour arrondir vers le bas: POSIX::floor($x)
Pour arrondir: POSIX::ceil($x)
Pour arrondir loin de zéro: POSIX::floor($x) - int($x) + POSIX::ceil($x)
Pour arrondir au nombre entier le plus proche: POSIX::floor($x+.5)
Notez que int($x+.5)
échoue mal pour les valeurs négatives. int(-2.1+.5)
est int(-1.6)
, ce qui correspond à -1.
Non, 'int' arrondit vers zéro, alors que normal l'arrondit vers pair. Exécutez 'perl -le 'printf" int (% s) est% d, rond (% s) est% .0f; \ n ", ($ _ + 0.5) x4 pour -10..10' 'et vous verrez des choses comme int (-3.5) est -3, rond (-3.5) est -4; int (-2.5) est -2, rond (-2.5) est -2; int (-1.5) est -1, rond (-1.5) est -2; int (-0.5) est 0, rond (-0.5) est -0; int (0.5) est 0, rond (0.5) est 0; int (1.5) est 1, rond (1.5) est 2; int (2.5) est 2, rond (2.5) est 2; int (3.5) est 3, rond (3.5) est 4; int (4.5) est 4, rond (4.5) est 4; – tchrist
@tchrist En fait, l'arrondissement normal est vers le plus proche; seul le cas frontière .5 arrondit vers pair. – fishinear
Exemples 9/4 = 2,25
int (9)/int (4) = 2
9/4 - reste/deniminator = 2
9/4 - 9% 4/4 = 2
Cette réponse est complètement fausse. "int (9)/int (4) == 2.25", donc je pense que Paul voulait dire int (9/4) –
Je pense qu'il n'a pas testé ses exemples – Znik
espérons que cela fonctionne
int (9/4) = 2.
Merci Manoj Kumar
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));
avis, 'int' est pas coulée. C'est une fonction pour convertir un nombre en un nombre entier. C'est parce que Perl 5 n'a pas de division entière séparée. L'exception est lorsque vous utilisez 'entier'. Alors vous perdrez la vraie division.
Oui, mais la division entière serait int (5)/int (1.5).Sinon, vous arrondissez la vraie division. – Rog
mais int (5)/int (1.5)! = Int – Learning
Désolé, c'est ce que je demandais vraiment. Je voulais un résultat int après avoir fait n'importe quelle sorte de division. Alors oui, je cherchais à arrondir. –