Penukaran tersirat daripada apungan (nombor) kepada int kehilangan ketepatan
P粉449281068
P粉449281068 2023-10-21 18:33:55
0
2
809

Saya telah menggunakan formula ini sebelum php 8.1

<?php
$number = 0;
echo log10(abs($number)) / 3 | 0;

echo PHP_EOL;

$number = 100;
echo log10(abs($number)) / 3 | 0;

echo PHP_EOL;
    
$number = 1100;
echo log10(abs($number)) / 3 | 0;

echo PHP_EOL;
    
$number = 10000000;
echo log10(abs($number)) / 3 | 0;
?>

Ia berfungsi dengan baik tetapi kini selepas menaik taraf saya terus mendapat ralat ini

Deprecated: Implicit conversion from float -INF to int loses precision

Deprecated: Implicit conversion from float 0.6666666666666666 to int loses precision

Deprecated: Implicit conversion from float 1.0137975617194084 to int loses precision

Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision

Saya tidak dapat mencari atau memahami daripada dokumentasi 8.1 mengapa ini berlaku sekarang

P粉449281068
P粉449281068

membalas semua(2)
P粉043295337
// Implicit variant
$number= "2";
$calc = 2 + $number;

// Cast variant
$number = "2";
$calc= 2 + (int) $number;

// Explicit variant
$number = "2";
$calc = 2 + intval($number);

// Everything is good variant ^^
$number = 2;
$calc = 2 + $number;
P粉211600174

Apabila anda melakukan operasi OR bitwise melalui operator |, anda mendapat penukaran tersirat kepada integer. Ini adalah...pelik...cara untuk menukar kepada integer. Untuk mengelakkan amaran, hanya hantar secara eksplisit.

Tersirat:

echo log10(abs($number)) / 3 | 0;

Lulus fungsi secara eksplisit:

echo intval(log10(abs($number)) / 3);

Atau melalui pelakon:

echo (int) (log10(abs($number)) / 3);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!