2009-02-12 7 views

Répondre

36

Vous pouvez lancer ints en Perl:

int(5/1.5) = 3; 
+5

Oui, mais la division entière serait int (5)/int (1.5).Sinon, vous arrondissez la vraie division. – Rog

+4

mais int (5)/int (1.5)! = Int – Learning

+2

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. –

75

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 
+0

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

4

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.

+4

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

+0

@tchrist En fait, l'arrondissement normal est vers le plus proche; seul le cas frontière .5 arrondit vers pair. – fishinear

-2

Exemples 9/4 = 2,25

int (9)/int (4) = 2

9/4 - reste/deniminator = 2

9/4 - 9% 4/4 = 2

+3

Cette réponse est complètement fausse. "int (9)/int (4) == 2.25", donc je pense que Paul voulait dire int (9/4) –

+0

Je pense qu'il n'a pas testé ses exemples – Znik

0

espérons que cela fonctionne

int (9/4) = 2.

Merci Manoj Kumar

3

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.

Questions connexes