Je travaille sur un script PHP qui gère les montants monétaires, et doit donc être exact avec 2 décimales. Pour ce faire, je convertis l'entrée utilisateur en un nombre en le multipliant par 100, puis en le convertissant en int. Cela fonctionne bien, jusqu'à ce que j'ai récemment découvert un nombre qui augmente de 1 lorsqu'il est converti en int.PHP (int) génère un mauvais numéro
le code défectueux:
$number = (int)(str_replace(',','.',$_POST["input"])*100);
Le nombre qui donne des problèmes est 2509,22 (je vis aux Pays-Bas, nous utilisons donc une virgule est pour décimaux, d'où la str_replace dans la ligne de code ci-dessus). Cette valeur crée le nombre entier $ 250921, ce qui est évidemment 1 trop faible. Je sais que int a des limites, mais ce nombre est bien en deçà des limites pour autant que je sache ...
Pourquoi avez-vous besoin d'en faire un int? Quel est le but de faire cela? Qu'est-ce qui se passe à côté de cet int? – Andreas
Je l'utilise pour m'assurer que l'entrée ne contient pas plus de 2 décimales. Comme indiqué, il s'agit d'informations financières, et ceci afin d'empêcher l'utilisateur d'entrer des fractions plus petites que possible dans les systèmes financiers. – Discoverer
Utilisez plutôt bcmath. Ne jamais opérer sur des flotteurs sauf si vous êtes absolument sûr de la sortie et en juger par votre code, je suis sûr que vous ne l'êtes pas. Vous pouvez en savoir plus sur la précision du nombre flottant ici http://php.net/manual/fr/language.types.float.php –