Maison php教程 php手册 Solutions aux calculs, comparaisons et arrondis en virgule flottante inexacts dans les bases de PHP_php

Solutions aux calculs, comparaisons et arrondis en virgule flottante inexacts dans les bases de PHP_php

May 16, 2016 am 09:00 AM
取整 浮点数

Comparaison des résultats des calculs en virgule flottante
Un exemple de calcul en virgule flottante est le suivant :

Copier le code Le code est le suivant :

$a = 0,2+0,7;
$b = 0,9;
var_dump($a == $b);

Le résultat imprimé est : bool(false). En d’autres termes, le résultat du calcul de 0,2+0,7 ici n’est pas égal à 0,9, ce qui est évidemment contraire à notre bon sens.

Concernant ce problème, le manuel officiel de PHP a déclaré un jour : Apparemment, une simple fraction décimale telle que 0,2 ne peut pas être convertie en un format binaire interne sans perdre un peu de précision. Cela est dû au fait qu’il est impossible d’exprimer exactement certaines fractions décimales avec un nombre fini de chiffres. Par exemple, 1/3 en décimal devient 0,3333333….

Nous imprimons les variables ci-dessus au format double précision :

Copier le code Le code est le suivant :

$a = 0,2+0,7;
$b = 0,9;
printf("%0.20f", $a);
echo '
';
printf("%0.20f", $b);

Les résultats de sortie sont les suivants :

Copier le code Le code est le suivant :

0.899999999999999991118
0.90000000000000002220

Évidemment, ici, en tant que données à virgule flottante, une partie de leur précision a été perdue et ne peut pas être complètement exacte. Ne vous fiez donc jamais à l’exactitude du résultat d’un nombre à virgule flottante jusqu’au dernier chiffre, et ne comparez jamais l’égalité de deux nombres à virgule flottante. Il est à noter qu'il ne s'agit pas d'un problème avec PHP, mais d'un problème avec le traitement interne de l'ordinateur des nombres à virgule flottante ! Le même problème sera rencontré dans des langages tels que C et JAVA.

Donc, pour comparer deux nombres à virgule flottante, nous devons les contrôler dans la plage de précision dont nous avons besoin avant de comparer, utilisez donc la fonction bcadd() pour ajouter les nombres à virgule flottante et convertir la précision (en chaîne) :

Copier le code Le code est le suivant :

var_dump(bcadd(0.2,0.7,1) == 0.9); // Sortie : bool(true)

Arrondi des nombres à virgule flottante

Dans l'article "Fonctions d'arrondi PHP Ceil et Floor", il y a un exemple :

Copier le code Le code est le suivant :

echo ceil(2.1/0.7); // Sortie : 4
?>

Après la discussion ci-dessus sur les calculs de nombres à virgule flottante, nous savons que cela est dû aux résultats inexacts du calcul des nombres à virgule flottante :

Copier le code Le code est le suivant :

printf("%0.20f", (2.1/0.7)); // Sortie : 3.00000000000000044409
?>

Après la discussion ci-dessus sur le calcul des nombres à virgule flottante, nous savons que cela est dû au résultat inexact du calcul des nombres à virgule flottante, nous pouvons donc utiliser la fonction round() pour y remédier :

Copier le code Le code est le suivant :

echo ceil( round((2.1/0.7),1) );
?>

Bien que la fonction round() arrondisse selon la précision spécifiée, conserver une décimale n'a aucun effet sur notre résultat d'arrondi.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment convertir une chaîne en décimal en php Comment convertir une chaîne en décimal en php Mar 22, 2023 pm 03:22 PM

PHP est un langage de programmation puissant largement utilisé dans le domaine du développement Web. L'une des situations les plus courantes est la nécessité de convertir une chaîne en valeur décimale. Ceci est très utile lors du traitement de données. Dans cet article, nous expliquerons comment convertir une chaîne en décimal en PHP.

Méthode d'arrondi des nombres à virgule flottante PHP Méthode d'arrondi des nombres à virgule flottante PHP Mar 21, 2024 am 09:21 AM

Cet article expliquera en détail la méthode d'arrondi des nombres à virgule flottante PHP. L'éditeur pense que c'est très pratique, je la partage donc avec vous comme référence, j'espère que vous pourrez gagner quelque chose après avoir lu cet article. Présentation de l'arrondi à virgule flottante PHP Les nombres à virgule flottante sont représentés dans les ordinateurs sous la forme d'un point décimal suivi d'un exposant. Cependant, ils sont souvent stockés sous forme d'approximations avec un nombre limité de chiffres. Lorsque vous devez arrondir un nombre à virgule flottante avec une précision spécifique, il existe plusieurs façons de le faire. Méthode 1. Fonction round() La fonction round() arrondit un nombre à virgule flottante à l'entier le plus proche. Il accepte les nombres à virgule flottante et les paramètres de précision facultatifs. Par exemple : $num=1.55;echoround($num);//Sortie : 2echoround($num,1)

Convertir un nombre à virgule flottante en chaîne à l'aide de la fonction strconv.FormatFloat Convertir un nombre à virgule flottante en chaîne à l'aide de la fonction strconv.FormatFloat Jul 25, 2023 am 11:45 AM

Utilisez la fonction strconv.FormatFloat pour convertir des nombres à virgule flottante en chaînes Dans le langage Go, nous avons souvent besoin de convertir des nombres à virgule flottante en types de chaînes pour les besoins de sortie ou de stockage. Le package strconv est fourni dans le langage Go et la fonction FormatFloat qu'il contient peut convertir les nombres à virgule flottante en types de chaînes. La fonction FormatFloat prend trois paramètres : f représente le nombre à virgule flottante à convertir, fmt représente le format et prec représente le nombre de décimales à conserver. Parmi eux, le paramètre f

Causes et stratégies d'évitement des erreurs de calcul de virgule flottante PHP Causes et stratégies d'évitement des erreurs de calcul de virgule flottante PHP Feb 27, 2024 pm 06:33 PM

En tant que langage de script côté serveur populaire, PHP rencontre souvent des problèmes de perte de précision ou d'erreurs de calcul lors de l'exécution de calculs à virgule flottante. Ces problèmes peuvent affecter la précision et la stabilité du programme. Cet article explorera les causes des erreurs de calcul de virgule flottante PHP, proposera quelques stratégies d'évitement et donnera des exemples de code spécifiques pour référence. 1. Raisons des erreurs de calcul des nombres à virgule flottante PHP. Dans les ordinateurs, les nombres à virgule flottante sont représentés sous forme binaire, et le binaire ne peut pas représenter avec précision toutes les décimales, ce qui conduit à l'inexactitude des nombres à virgule flottante.

Comment diviser et arrondir en php Comment diviser et arrondir en php Mar 21, 2023 pm 02:52 PM

Avec le développement de la programmation informatique, nous pouvons rencontrer des scénarios dans lesquels nous devons effectuer des opérations de division et d'arrondi dans notre travail de programmation quotidien. En programmation PHP, nous pouvons utiliser différentes méthodes pour atteindre cet objectif.

Une explication approfondie de PHP BCMath : Libérer le potentiel des opérations sur les nombres Une explication approfondie de PHP BCMath : Libérer le potentiel des opérations sur les nombres Feb 23, 2024 am 09:10 AM

:1. Introduction à BCMath BCMath est une bibliothèque d'extension intégrée à PHP, spécialement utilisée pour gérer les opérations sur les grands nombres entiers et à virgule flottante. Il fournit une multitude de fonctions pour effectuer diverses opérations mathématiques telles que l'addition, la soustraction, la multiplication, la division, le carré et la racine carrée, et prend en charge la représentation numérique dans plusieurs bases. 2. Avantages de BCMath Par rapport aux opérateurs et fonctions arithmétiques fournis nativement par PHP, BCMath présente principalement les avantages suivants : Une plus grande précision : les résultats des opérations de BCMath peuvent conserver des chiffres plus significatifs, ce qui est utile pour les calculs impliquant de grands nombres de scènes. Plage plus large : BCMath peut gérer des nombres plus grands que les types de données natifs de PHP, évitant ainsi les problèmes de débordement ou de perte de précision. Fonctionnalités plus riches : BCMath fournit

Comment convertir une chaîne en float en PHP Comment convertir une chaîne en float en PHP Mar 27, 2024 pm 12:48 PM

La conversion d'une chaîne en nombre à virgule flottante est une opération courante en PHP et peut être réalisée via des méthodes intégrées. Assurez-vous d’abord que la chaîne est dans un format à virgule flottante légal avant de pouvoir être convertie avec succès en nombre à virgule flottante. Ce qui suit détaillera comment convertir une chaîne en nombre à virgule flottante en PHP et fournira des exemples de code spécifiques. 1. Utiliser un cast (float) En PHP, le moyen le plus simple de convertir une chaîne en nombre à virgule flottante est d'utiliser un cast. La façon de forcer la conversion est d'ajouter (float) avant la chaîne, et PHP la convertira automatiquement

Arrondir les nombres à virgule flottante à l'aide de la fonction Math.Round en C# Arrondir les nombres à virgule flottante à l'aide de la fonction Math.Round en C# Nov 18, 2023 pm 02:17 PM

L'utilisation de la fonction Math.Round en C# pour arrondir des nombres à virgule flottante nécessite des exemples de code spécifiques. Dans le langage de programmation C#, nous devons parfois arrondir des nombres à virgule flottante. A ce stade, nous pouvons utiliser la fonction Math.Round pour réaliser cette fonction. La fonction Math.Round est une fonction intégrée en C# utilisée pour les calculs mathématiques. Sa fonction principale est d'arrondir le nombre à virgule flottante spécifié. Voici le format courant de la fonction Math.Round : Math.Round(doub

See all articles