Rumah php教程 php手册 Penyelesaian untuk pengiraan titik terapung yang tidak tepat, perbandingan dan pembundaran dalam asas PHP_php

Penyelesaian untuk pengiraan titik terapung yang tidak tepat, perbandingan dan pembundaran dalam asas PHP_php

May 16, 2016 am 09:00 AM
Bulat nombor titik terapung

Perbandingan hasil pengiraan titik terapung
Contoh pengiraan titik terapung adalah seperti berikut:

Salin kod Kod adalah seperti berikut:

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

Hasil cetakan ialah: bool(false). Dalam erti kata lain, hasil pengiraan 0.2+0.7 di sini tidak sama dengan 0.9, yang jelas bertentangan dengan akal fikiran kita.

Mengenai isu ini, manual PHP rasmi pernah menyatakan: Nampaknya pecahan perpuluhan mudah seperti 0.2 tidak boleh ditukar kepada format binari dalaman tanpa kehilangan sedikit ketepatan. Ini ada kaitan dengan hakikat bahawa adalah mustahil untuk menyatakan pecahan perpuluhan tertentu dengan tepat dengan bilangan digit terhingga. Sebagai contoh, 1/3 dalam perpuluhan menjadi 0.3333333….

Kami mencetak pembolehubah di atas dalam format ketepatan dua kali:

Salin kod Kod adalah seperti berikut:

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

Hasil keluaran adalah seperti berikut:

Salin kod Kod adalah seperti berikut:

0.89999999999999991118
0.9000000000000002220

Jelas sekali di sini, sebagai data titik terapung, sebahagian daripada ketepatannya telah hilang dan tidak boleh tepat sepenuhnya. Oleh itu, jangan sekali-kali percaya bahawa hasil nombor titik terapung adalah tepat kepada digit terakhir, dan jangan sekali-kali membandingkan dua nombor titik terapung untuk kesamaan. Perlu diingatkan bahawa ini bukan masalah dengan PHP, tetapi masalah dengan pemprosesan dalaman komputer nombor titik terapung! Masalah yang sama akan dihadapi dalam bahasa seperti C dan JAVA.

Jadi untuk membandingkan dua nombor titik terapung, kita perlu mengawalnya dalam julat ketepatan yang kita perlukan sebelum membandingkan, jadi gunakan fungsi bcadd() untuk menambah nombor titik terapung dan tukar ketepatan (kepada rentetan):

Salin kod Kod adalah seperti berikut:

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

Pembundaran nombor titik terapung

Dalam artikel "Sisi dan lantai fungsi pembulatan PHP", terdapat contoh:

Salin kod Kod adalah seperti berikut:

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

Selepas perbincangan di atas tentang pengiraan nombor titik terapung, kami tahu bahawa ini disebabkan oleh keputusan pengiraan nombor titik terapung yang tidak tepat:

Salin kod Kod adalah seperti berikut:

printf("%0.20f", (2.1/0.7)); // Output: 3.0000000000000044409
?>

Selepas perbincangan di atas tentang pengiraan nombor titik terapung, kami tahu bahawa ini disebabkan oleh hasil pengiraan nombor titik terapung yang tidak tepat, jadi kami boleh menggunakan fungsi pusingan() untuk menanganinya:

Salin kod Kod adalah seperti berikut:

siling gema( bulat((2.1/0.7),1) );
?>

Walaupun fungsi bulat() membulat mengikut ketepatan yang ditentukan, mengekalkan satu tempat perpuluhan tidak mempunyai kesan pada hasil pembundaran kami.

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)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Muzium Dua Point: Semua Pameran dan Di Mana Mencari Mereka
1 bulan 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

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.

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.

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

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

Bagaimana untuk membundarkan nombor titik terapung menggunakan fungsi Math.Truncate dalam C# Bagaimana untuk membundarkan nombor titik terapung menggunakan fungsi Math.Truncate dalam C# Nov 18, 2023 pm 02:02 PM

Cara menggunakan fungsi Math.Truncate dalam C# untuk membundarkan nombor titik terapung memerlukan contoh kod khusus Dalam pengaturcaraan C#, kita sering menghadapi situasi di mana nombor titik terapung perlu dibundarkan ke bawah. Antaranya, pembundaran ke bawah ialah operasi biasa dan boleh dilaksanakan menggunakan fungsi Math.Truncate dalam C#. Artikel ini akan memperkenalkan penggunaan fungsi Math.Truncate secara terperinci dan memberikan contoh kod khusus. Fungsi Math.Truncate ialah fungsi matematik dalam C#, digunakan untuk menukar terapung

See all articles