Heim Backend-Entwicklung PHP-Tutorial Problem mit der PHP-Bodenfunktion.

Problem mit der PHP-Bodenfunktion.

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

Nach dem Login kopieren

Ich schreibe gerade ein Projekt zum Thema Finanzen. Es gibt viele Dezimalprobleme. Als ich einmal mit Floor auf zwei Dezimalstellen abrundete, stellte ich plötzlich fest, dass der folgende Code abnormal war.

$money=271.28;
echo $money=floor($money*pow(10,2))/100
Nach dem Login kopieren
Ich war überrascht, dass die Ausgabe nicht 271,28, sondern 271,27 war!

Nachdem ich viele Informationen überprüft hatte, sah ich Folgendes auf der offiziellen PHP-Website:

Gleitkommazahlen haben eine begrenzte Genauigkeit Rationale Zahlen, die in Dezimalschreibweise wie 0,1 oder 0,7 genau dargestellt werden können , Egal wie viele Mantissen es gibt, sie werden nicht genau durch die intern verwendete Binärdatei dargestellt und können daher nicht in das Binärformat konvertiert werden, ohne ein wenig an Präzision zu verlieren. Dies kann zu verwirrenden Ergebnissen führen: Beispielsweise gibt floor((0.1+0.7)*10) normalerweise 7 anstelle von The zurück erwartet 8, da die interne Darstellung des Ergebnisses tatsächlich 7,9999999999999991118... ähnelt. Vertrauen Sie also niemals darauf, dass das Ergebnis einer Gleitkommazahl bis zur letzten Ziffer genau ist, und vergleichen Sie niemals zwei Gleitkommazahlen, um festzustellen, ob sie gleich sind.

Später druckte ich das Ergebnis der obigen Operation aus:

printf("%.12f", $money*pow(10,2));
Nach dem Login kopieren
Das Ergebnis war: 27127.999999999996

Es drehte sich stellt sich als Genauigkeitsproblem heraus. Es wurde noch keine einheitliche Lösung gefunden. Ich kann der Codelogik nur

if ($money - round ( $money, 2 ) < 0.00001) {

}else{
$money=floor($money*pow(10,2))/100;
}
Nach dem Login kopieren
hinzufügen, um eine erneute Verarbeitung der Daten zu vermeiden, die auf zwei Ziffern genau waren.

Wenn jemand eine andere Möglichkeit kennt, die obige Funktion zu implementieren (auf zwei Dezimalstellen genau und die dritte Ziffer weglassen), lassen Sie es mich bitte wissen.

Das Obige stellt das Problem der Bodenfunktion von PHP vor. Ich hoffe, dass es Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird, einschließlich relevanter Inhalte.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

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

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

So verwenden Sie die FLOOR-Funktion von MySQL zum Abrunden So verwenden Sie die FLOOR-Funktion von MySQL zum Abrunden Jul 25, 2023 pm 12:45 PM

So verwenden Sie die FLOOR-Funktion von MySQL zum Abrunden. In MySQL wird die FLOOR-Funktion zum Abrunden verwendet. Die FLOOR-Funktion ist ein sehr nützliches Werkzeug, wenn Sie eine Gleitkommazahl oder eine Zahl mit Dezimalpunkt auf die nächste ganze Zahl abrunden müssen. In diesem Artikel wird die Verwendung der FLOOR-Funktion von MySQL vorgestellt und ein praktischer Beispielcode bereitgestellt. Lassen Sie uns zunächst die Syntax der FLOOR-Funktion verstehen. Die Syntax der FLOOR-Funktion lautet wie folgt: FLOOR(x), wobei x darstellt

Berechnen Sie die Potenz eines numerischen Werts mit der Java-Funktion Math.pow() Berechnen Sie die Potenz eines numerischen Werts mit der Java-Funktion Math.pow() Jul 25, 2023 pm 06:25 PM

Verwenden Sie die Funktion Math.pow() von Java, um die Potenz eines numerischen Werts zu berechnen. Bei mathematischen Operationen müssen wir häufig die Potenz eines numerischen Werts berechnen. In Java können wir die Funktion Math.pow() verwenden, um Potenzierungsoperationen durchzuführen. In diesem Artikel wird die Verwendung der Funktion Math.pow() vorgestellt und einige Codebeispiele gegeben. Die Funktion Math.pow() ist eine statische Methode in der Mathematikbibliothek in Java, mit der die Potenz eines Werts berechnet und das Berechnungsergebnis zurückgegeben wird. Die Syntax lautet wie folgt: Math.p

Was bedeuten PoS und PoW? Was ist der Unterschied? Was bedeuten PoS und PoW? Was ist der Unterschied? Dec 16, 2024 pm 06:50 PM

Dieser Artikel wirft einen detaillierten Blick auf zwei gängige Konsensmechanismen: Proof of Stake (PoS) und Proof of Work (PoW). PoS erfordert, dass Validatoren Token verpfänden, um die Befugnis zur Überprüfung von Transaktionen zu erhalten. Dies hat die Vorteile einer Energieeinsparung und einer guten Skalierbarkeit, kann aber auch zu einer Vermögenskonzentration führen. PoW erfordert, dass Miner komplexe mathematische Probleme lösen, um Transaktionen zu verifizieren. Es ist sicherer und dezentralisiert, verbraucht aber viel Energie und ist schlecht skalierbar. In diesem Artikel werden die Prinzipien, Vor- und Nachteile sowie Anwendungen von PoS und PoW im Blockchain-Bereich verglichen, um den Lesern zu helfen, die Schlüsselrollen zu verstehen, die sie im Konsensmechanismus spielen.

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 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