Maison développement back-end tutoriel php PHP的floor函数问题。

PHP的floor函数问题。

Aug 08, 2016 am 09:31 AM
floor Money pow quot

Copier après la connexion

最近在写一个有关金融的项目。里面涉及到好多资金小数的问题。有一次用到floor想实现向下取整精确到两位小数时,突然发现如下代码不正常了。

$money=271.28;
echo $money=floor($money*pow(10,2))/100
Copier après la connexion
我惊讶的发现输出的竟然不是271.28而是271.27!

后来查了好多资料,在php官网上看到了这么一点:

浮点数的精度有限,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。 

后来我打印了一下上面运算的结果:

printf("%.12f", $money*pow(10,2));
Copier après la connexion
发现结果是:27127.999999999996

原来是精度问题。暂时还没找到统一的解决办法。我只有在代码逻辑中加入

if ($money - round ( $money, 2 ) 来避免已经精确了两位的数据再处理。<p>如果有人知道另一种实现我上述功能(精确到小数点后两位无论第三位是什么都舍弃)的方法请教教我。<br></p><p><spanfira sans pro font-size:16px line-height:24px background-color:rgb><spanfira sans pro font-size:16px line-height:24px background-color:rgb></spanfira></spanfira></p>
                
                
                <p>
                    以上就介绍了PHP的floor函数问题。,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。</p>
                <p>
                    </p>
             
Copier après la connexion
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)

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Comment utiliser la fonction FLOOR de MySQL pour arrondir Comment utiliser la fonction FLOOR de MySQL pour arrondir Jul 25, 2023 pm 12:45 PM

Comment utiliser la fonction FLOOR de MySQL pour arrondir à l'inférieur Dans MySQL, la fonction FLOOR est utilisée pour arrondir à l'inférieur. La fonction FLOOR est un outil très utile si vous devez arrondir un nombre à virgule flottante ou un nombre avec une virgule décimale à l'entier le plus proche. Cet article explique comment utiliser la fonction FLOOR de MySQL et fournit des exemples de code pratiques. Tout d’abord, comprenons la syntaxe de la fonction FLOOR. La syntaxe de la fonction FLOOR est la suivante : FLOOR(x) où x représente

Calculez la puissance d'une valeur numérique à l'aide de la fonction Math.pow() de Java Calculez la puissance d'une valeur numérique à l'aide de la fonction Math.pow() de Java Jul 25, 2023 pm 06:25 PM

Utilisez la fonction Math.pow() de Java pour calculer la puissance d'une valeur numérique. Dans les opérations mathématiques, nous avons souvent besoin de calculer la puissance d'une valeur numérique. En Java, nous pouvons utiliser la fonction Math.pow() pour effectuer des opérations d'exponentiation. Cet article explique comment utiliser la fonction Math.pow() et donne quelques exemples de code. La fonction Math.pow() est une méthode statique de la bibliothèque mathématique de Java, utilisée pour calculer la puissance d'une valeur et renvoyer le résultat du calcul. Sa syntaxe est la suivante : Math.p

Que signifient PoS et PoW ? Quelle est la différence ? Que signifient PoS et PoW ? Quelle est la différence ? Dec 16, 2024 pm 06:50 PM

Cet article examine en profondeur deux mécanismes de consensus traditionnels : la preuve d'enjeu (PoS) et la preuve de travail (PoW). Le PoS exige que les validateurs promettent des jetons pour obtenir le pouvoir de vérifier les transactions. Il présente les avantages d'une économie d'énergie et d'une bonne évolutivité, mais il peut également conduire à une concentration des richesses. PoW oblige les mineurs à résoudre des problèmes mathématiques complexes pour vérifier les transactions. Il est plus sécurisé et décentralisé, mais il consomme beaucoup d'énergie et est peu évolutif. Cet article compare les principes, les avantages et les inconvénients, ainsi que les applications du PoS et du PoW dans le domaine de la blockchain pour aider les lecteurs à comprendre les rôles clés qu'ils jouent dans le mécanisme de consensus.

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

图片消失怎么解决 图片消失怎么解决 Apr 07, 2024 pm 03:02 PM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

图片消失怎么解决 图片消失怎么解决 Jun 13, 2016 am 10:09 AM

图片消失如何解决先是图片文件上传$file=$_FILES['userfile'];  if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner(image_src ) VALUES ('images/{$file['name'

为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 Jun 13, 2016 am 10:24 AM

为什么我在php上写的这个代码,在浏览器上什么都不显示啊

See all articles