


Penyelesaian untuk pengiraan titik terapung yang tidak tepat, perbandingan dan pembundaran dalam asas PHP_php
Perbandingan hasil pengiraan titik terapung
Contoh pengiraan titik terapung 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:
$a = 0.2+0.7;
$b = 0.9;
printf("%0.20f", $a);
echo '
';
printf("%0.20f", $b);
Hasil keluaran 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):
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:
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:
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:
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.

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

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.

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.

: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

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

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
