PHP中浮点数计算比较及取整不准确的解决方法,取整不准确_PHP教程
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() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP ialah bahasa pengaturcaraan yang berkuasa yang digunakan secara meluas dalam dunia pembangunan web. Salah satu situasi yang sangat biasa ialah keperluan untuk menukar rentetan kepada perpuluhan. Ini sangat berguna apabila melakukan pemprosesan data. Dalam artikel ini, kami akan menerangkan cara menukar rentetan kepada perpuluhan dalam PHP.

Artikel ini akan menerangkan secara terperinci kaedah pembundaran nombor titik terapung PHP Editor berpendapat ia sangat praktikal, jadi saya kongsikan dengan anda sebagai rujukan saya harap anda dapat memperoleh sesuatu selepas membaca artikel ini. PHP Gambaran Keseluruhan Pembundaran Titik Terapung Nombor titik terapung diwakili dalam komputer sebagai titik perpuluhan diikuti oleh eksponen, namun, ia sering disimpan dalam anggaran dengan bilangan digit yang terhad. Apabila anda perlu membundarkan nombor titik terapung kepada ketepatan tertentu, terdapat beberapa cara untuk melakukannya. Kaedah 1. fungsi bulat() Fungsi bulat() membundarkan nombor titik terapung kepada integer terdekat. Ia menerima nombor titik terapung dan parameter ketepatan pilihan. Contohnya: $num=1.55;echoround($num);//Output: 2echoround($num,1)

Gunakan fungsi strconv.FormatFloat untuk menukar nombor titik terapung kepada rentetan Dalam bahasa Go, kita selalunya perlu menukar nombor titik terapung kepada jenis rentetan untuk keperluan output atau storan. Pakej strconv disediakan dalam bahasa Go, dan fungsi FormatFloat di dalamnya boleh menukar nombor titik terapung kepada jenis rentetan. Fungsi FormatFloat mengambil tiga parameter: f mewakili nombor titik terapung yang hendak ditukar, fmt mewakili format dan prec mewakili bilangan tempat perpuluhan untuk dikekalkan. Antaranya, parameter f

Dengan pembangunan pengaturcaraan komputer, kita mungkin menghadapi senario di mana kita perlu melaksanakan operasi bahagian dan pembundaran dalam kerja pengaturcaraan harian kita. Dalam pengaturcaraan PHP, kita boleh menggunakan kaedah yang berbeza untuk mencapai tujuan ini.

Sebagai bahasa skrip sebelah pelayan yang popular, PHP sering menghadapi masalah kehilangan ketepatan atau ralat pengiraan apabila melakukan pengiraan titik terapung Masalah ini boleh menjejaskan ketepatan dan kestabilan program. Artikel ini akan meneroka punca ralat pengiraan titik terapung PHP, mencadangkan beberapa strategi pengelakan dan memberikan contoh kod khusus untuk rujukan. 1. Sebab ralat pengiraan titik terapung PHP Dalam komputer, nombor titik terapung diwakili dalam bentuk binari, dan binari tidak boleh mewakili semua perpuluhan perpuluhan dengan tepat, yang membawa kepada ketidaktepatan nombor titik terapung.

:1. Pengenalan kepada BCMath BCMath ialah perpustakaan sambungan terbina dalam PHP, yang digunakan khas untuk mengendalikan operasi nombor integer dan titik terapung yang besar. Ia menyediakan pelbagai fungsi untuk melaksanakan pelbagai operasi matematik seperti penambahan, penolakan, pendaraban, pembahagian, kuasa dua dan punca kuasa dua, dan menyokong perwakilan digital dalam berbilang asas. 2. Kelebihan BCMath Berbanding dengan pengendali aritmetik dan fungsi yang disediakan secara asli oleh PHP, BCMath terutamanya mempunyai kelebihan berikut: Ketepatan yang lebih tinggi: Keputusan operasi BCMath boleh mengekalkan digit yang lebih ketara, yang berguna untuk pengiraan yang melibatkan adegan yang besar. Julat yang lebih luas: BCMath boleh mengendalikan nombor yang lebih besar daripada jenis data asli PHP, dengan itu mengelakkan limpahan atau kehilangan isu ketepatan. Ciri yang lebih kaya: BCMath menyediakan

Menggunakan fungsi Math.Round dalam C# untuk membundarkan nombor titik terapung memerlukan contoh kod khusus Dalam bahasa pengaturcaraan C#, kadangkala kita perlu membundarkan nombor titik terapung. Pada masa ini, kita boleh menggunakan fungsi Math.Round untuk mencapai fungsi ini. Fungsi Math.Round ialah fungsi terbina dalam C# yang digunakan untuk pengiraan matematik Fungsi utamanya ialah untuk membundarkan nombor titik terapung yang ditentukan. Berikut ialah format biasa bagi fungsi Math.Round: Math.Round(doub

Menukar rentetan kepada nombor titik terapung ialah operasi biasa dalam PHP dan boleh dicapai melalui kaedah terbina dalam. Mula-mula pastikan rentetan itu berada dalam format titik terapung yang sah sebelum ia berjaya ditukar kepada nombor titik terapung. Berikut akan terperinci cara menukar rentetan kepada nombor titik terapung dalam PHP dan memberikan contoh kod khusus. 1. Gunakan (float) cast Dalam PHP, cara paling mudah untuk menukar rentetan kepada nombor titik terapung adalah dengan menggunakan cast. Cara untuk memaksa penukaran adalah dengan menambah (terapung) sebelum rentetan, dan PHP akan menukarnya secara automatik
