Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implicit conversion from float (number) to int loses precision

Tags:

php

i used to use this formula before 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;
?>

and it worked fine but now i keep getting these errors from them after upgrading

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

and i can not find or understand why it is happening now from the 8.1 docs

like image 743
yvgwxgtyowvaiqndwo Avatar asked Nov 17 '25 02:11

yvgwxgtyowvaiqndwo


2 Answers

You're getting an implicit conversion to integer when you perform the bitwise OR operation via the | operator. It's an... odd... way to convert to integer. To avoid the warning, just explicitly convert instead.

Implicit:

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

Explicit via function:

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

Or via cast:

echo (int) (log10(abs($number)) / 3);
like image 84
Alex Howansky Avatar answered Nov 18 '25 18:11

Alex Howansky


// 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;
like image 42
MaZzIMo24 Avatar answered Nov 18 '25 16:11

MaZzIMo24



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!