Mon problème est le suivant: log(1000,10)
renvoie 3
, mais floor(log(1000,10))
renvoie 2
. Comment résoudre ce problème?Php log et le comportement étrange de la fonction de plancher
Ma version de php est 5.6.30-0 + deb8u1.
Mon problème est le suivant: log(1000,10)
renvoie 3
, mais floor(log(1000,10))
renvoie 2
. Comment résoudre ce problème?Php log et le comportement étrange de la fonction de plancher
Ma version de php est 5.6.30-0 + deb8u1.
From a 13 year old comment at the PHP:log documentation:
$val = 1000000
$val2 = floor(log($val,10)) // gives a value of 5 for $val2 and not 6 as expected.
$val2 = floor(log10($val)) // gives the correct value.
vous devez donc utiliser floor(log10(1000);
Bien que je ne suis certainement pas un expert, je pense que les différents résultats en PHP5 et PHP7 (comme indiqué dans les commentaires sur votre question) a à faire avec scalar type declaration, une nouvelle fonctionnalité de PHP 7 (essayez de jouer en mode strict pour en savoir plus, par exemple https://3v4l.org/KVCol).
Parce que log(1000)
est quelque chose comme 2,9999999999999996 et le sol() fonction Arrondit un nombre entier le plus proche
si vous voulez avoir 3, utilisez ronde et non étage
True. Le type du résultat sera toujours flottant, tout comme la note supplémentaire. – Twinfriends
Je dois utiliser l'exposant dans la forme normale de l'entier, donc je ne peux pas utiliser round (pour 999 je dois retourner 2) – bmv
vous pouvez toujours vérifier si c'est vraiment proche du nombre suivant. – sheplu
Il peut lié à flotter précision . Vous pouvez utiliser log10 (1000) à la place.
pourquoi me rejeter? S'il vous plaît essayez log10 (1000) et renvoyez un réel 3 –
Intéressant: https://3v4l.org/CemOL. – localheinz
@localheinz Wtf ... avez-vous juste trouvé un bug? Je veux dire, sur le manuel de PHP, il n'y a rien d'écrit que la fonction a changé pour PHP7 + - http://php.net/manual/fr/function.floor.php – Twinfriends
@Twinfriends Aucune idée, pour être honnête! – localheinz