Perbandingan hasil pengiraan titik terapung
Contoh pengiraan titik terapung adalah seperti berikut:
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:
Hasil keluaran adalah seperti berikut:
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):
Pembundaran nombor titik terapung
Dalam artikel "Sisi dan lantai fungsi pembulatan PHP", terdapat contoh:
Selepas perbincangan di atas tentang pengiraan nombor titik terapung, kami tahu bahawa ini disebabkan oleh keputusan pengiraan nombor titik terapung yang tidak tepat:
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:
Walaupun fungsi bulat() membulat mengikut ketepatan yang ditentukan, mengekalkan satu tempat perpuluhan tidak mempunyai kesan pada hasil pembundaran kami.