2010-06-25 4 views
1
echo 1/3; 

Je me attendais à ce qui précède à la sortie 0, mais en fait PHP est assez intelligent pour la sortie 0.33333333333333Depuis quand est-ce que PHP autocast integer pour flotter?

Depuis quand PHP commence à se comporter comme ça?

+0

Il n'a pas, mais il est coulée le résultat d'une expression mathématique (1/3) à un flotteur –

+0

il y a des réponses fraîches à votre question (s), acceptez-en un! ;) – acm

Répondre

12

Il s'est toujours comporté comme ceci. Voir: http://php.net/manual/en/language.operators.arithmetic.php

L'opérateur de division («/») retourne une valeur flottante à moins que les deux opérandes sont des nombres entiers (ou des chaînes qui obtiennent converties en nombres entiers) et les numéros sont divisibles, dans ce cas, une valeur entière sera retournée.

+0

Est-ce que "1" et "3" ne sont pas déjà un entier? – wamp

+6

@wamp: oui, mais 1 n'est pas divisible par 3. –

1

PHP n'est pas une langue fortement typée. Il fait des choses comme ça tout le temps. Pour autant que je sache, php a été conçu comme ça depuis le début.

+1

Il semblerait que j'ai mal compris PHP depuis le début alors ... – wamp

+0

La chose la plus folle est l'autocast de chaînes à nombre entier, si la chaîne se compose uniquement de chiffres ... –

0

Je dirais que c'est le comportement attendu.

Si vous voulez un entier, forcer un casting:

echo (int)(1/3); 
+0

Est-ce que '1' est identique à' (int) 1'? – wamp

+0

@wamp vous avez raison. Je ne suis pas encore vraiment réveillé :) –

+0

PHP n'est pas un langage fortement typé. Donc 1 pourrait être '1', 1, 1.00, "1" etc .... – Lizard