Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perbandingan perpuluhan titik terapung PHP: mengapa tidak sama?

Perbandingan perpuluhan titik terapung PHP: mengapa tidak sama?

WBOY
WBOYasal
2024-03-08 16:24:041114semak imbas

Perbandingan perpuluhan titik terapung PHP: mengapa tidak sama?

Perbandingan perpuluhan titik terapung PHP: mengapa tidak sama?

Dalam pengaturcaraan, kita sering menghadapi situasi di mana kita perlu membandingkan sama ada dua perpuluhan titik terapung adalah sama. Walau bagaimanapun, apabila kami menggunakan PHP untuk membandingkan perpuluhan titik terapung, kami sering mendapati bahawa dua nombor titik terapung yang kelihatan sama adalah tidak sama kerana isu ketepatan. Situasi ini sering mengelirukan Artikel ini akan menyelidiki isu perbandingan nombor titik terapung dalam PHP dan memberikan contoh kod khusus untuk menggambarkan mengapa situasi tidak sama berlaku apabila nombor titik terapung dibandingkan.

Dalam komputer, nombor titik terapung diwakili dalam perduaan Memandangkan perduaan tidak boleh mewakili perpuluhan perpuluhan tertentu dengan tepat (seperti 0.1), nombor titik terapung dalam komputer selalunya merupakan nilai anggaran. Ini membawa kepada masalah ketepatan apabila membandingkan nombor titik terapung, dan situasi seperti 0.1 + 0.2 != 0.3 sering berlaku.

Mari kita gambarkan masalah ini melalui contoh khusus. Katakan kita mempunyai dua nombor titik terapung 0.1 dan 0.2, dan kita cuba menggunakan PHP untuk membandingkan sama ada jumlahnya sama dengan 0.3:

$num1 = 0.1;
$num2 = 0.2;

$sum = $num1 + $num2;
$expected = 0.3;

if ($sum == $expected) {
    echo "相等";
} else {
    echo "不相等";
}

Apabila kita menjalankan kod di atas, kemungkinan hasil output akan "tidak sama" . Ini kerana 0.1, 0.2, dan 0.3 bukanlah nilai tepat dalam komputer, tetapi nilai anggaran, jadi akan terdapat ralat ketepatan semasa membuat perbandingan.

Untuk menyelesaikan masalah ini, kita boleh menggunakan fungsi terbina dalam round() dalam PHP untuk membundarkan nombor titik terapung untuk mengelakkan ralat ketepatan. Ubah suai kod di atas seperti berikut: round()来对浮点数进行四舍五入,从而避免精度误差。修改上面的代码如下:

$num1 = 0.1;
$num2 = 0.2;

$sum = $num1 + $num2;
$expected = 0.3;

if (round($sum, 10) == round($expected, 10)) {
    echo "相等";
} else {
    echo "不相等";
}

通过使用round()函数,我们将浮点数保留小数点后的位数,使计算结果更加精确。在这个代码示例中,我们使用round($sum, 10)round($expected, 10)rrreee

Dengan menggunakan fungsi round(), kami mengekalkan bilangan digit selepas titik perpuluhan dalam nombor titik terapung untuk menjadikan hasil pengiraan lebih tepat. Dalam contoh kod ini, kami menggunakan round($sum, 10) dan round($expected, 10) untuk membandingkan jumlah dua nombor titik terapung dengan ketepatan nilai jangkaan , dengan itu mengelakkan ketidaksamaan yang disebabkan oleh ralat ketepatan.

Ringkasnya, masalah perbandingan tidak sama bagi nombor titik terapung dalam PHP adalah disebabkan terutamanya oleh ralat anggaran dan ketepatan nombor titik terapung. Apabila membandingkan nombor titik terapung, kita harus memberi perhatian kepada isu ketepatan dan cuba mengelak daripada menggunakan tanda sama secara langsung untuk membandingkan nombor titik terapung. Dengan mengendalikan ketepatan dengan cara yang sesuai, kami dapat memastikan ketepatan perbandingan titik terapung, dengan itu meningkatkan kestabilan dan kebolehpercayaan program kami.

Saya berharap melalui pengenalan artikel ini, pembaca dapat memahami dengan lebih mendalam tentang isu perbandingan nombor titik terapung dalam PHP dan mengelakkan pepijat yang disebabkan oleh ralat ketepatan dalam pembangunan sebenar. 🎜

Atas ialah kandungan terperinci Perbandingan perpuluhan titik terapung PHP: mengapa tidak sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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