Jadual Kandungan
PHP中浮点数计算比较及取整不准确的解决方法,取整不准确
Rumah pembangunan bahagian belakang tutorial php PHP中浮点数计算比较及取整不准确的解决方法,取整不准确_PHP教程

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

Jul 13, 2016 am 10:10 AM
Bulat nombor titik terapung tatatanda saintifik

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() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/940487.htmlTechArticlePHP中浮点数计算比较及取整不准确的解决方法,取整不准确 浮点数计算结果比较 一则浮点数计算例子如下: 复制代码 代码如下: $a = 0.2+...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menukar rentetan kepada perpuluhan dalam php Bagaimana untuk menukar rentetan kepada perpuluhan dalam php Mar 22, 2023 pm 03:22 PM

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.

Kaedah pembundaran nombor titik terapung PHP Kaedah pembundaran nombor titik terapung PHP Mar 21, 2024 am 09:21 AM

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)

Tukar nombor titik terapung kepada rentetan menggunakan fungsi strconv.FormatFloat Tukar nombor titik terapung kepada rentetan menggunakan fungsi strconv.FormatFloat Jul 25, 2023 am 11:45 AM

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

Bagaimana untuk membahagi dan membulatkan dalam php Bagaimana untuk membahagi dan membulatkan dalam php Mar 21, 2023 pm 02:52 PM

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.

Punca dan strategi mengelakkan ralat pengiraan titik terapung PHP Punca dan strategi mengelakkan ralat pengiraan titik terapung PHP Feb 27, 2024 pm 06:33 PM

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.

Penjelasan mendalam tentang PHP BCMath: Melepaskan potensi operasi nombor Penjelasan mendalam tentang PHP BCMath: Melepaskan potensi operasi nombor Feb 23, 2024 am 09:10 AM

: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

Nombor titik terapung bulat menggunakan fungsi Math.Round dalam C# Nombor titik terapung bulat menggunakan fungsi Math.Round dalam C# Nov 18, 2023 pm 02:17 PM

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

Bagaimana untuk menukar rentetan kepada terapung dalam PHP Bagaimana untuk menukar rentetan kepada terapung dalam PHP Mar 27, 2024 pm 12:48 PM

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

See all articles