Maison php教程 php手册 PHP中浮点数计算比较及取整不准确的解决方法

PHP中浮点数计算比较及取整不准确的解决方法

Jun 06, 2016 pm 08:14 PM
取整 浮点数

这篇文章主要介绍了PHP 浮点数计算比较及取整不准确的解决方法,需要的朋友可以参考下

浮点数计算结果比较
一则浮点数计算例子如下:

复制代码 代码如下:


$a = 0.2+0.7;
$b = 0.9;
var_dump($a == $b);

打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的。

对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,,十进制的 1/3 变成了 0.3333333...。

我们将上面的变量用双精度格式打印出来:

复制代码 代码如下:


$a = 0.2+0.7;
$b = 0.9;
printf("%0.20f", $a);
echo '
';
printf("%0.20f", $b);

输出结果如下:

复制代码 代码如下:


0.89999999999999991118
0.90000000000000002220

显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,因此使用 bcadd() 函数来对浮点数想加并进行精度转换(为字符串):

复制代码 代码如下:


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

浮点数取整

在《PHP 取整函数 ceil 与 floor》一文中,曾有例子:

复制代码 代码如下:


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

经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的:

复制代码 代码如下:


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

经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,因此使用 round() 函数处理一下即可:

复制代码 代码如下:


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

虽然 round() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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