Bug #75558 [Nab]: Float to integer conversion
Edit report at https://bugs.php.net/bug.php?id=75558&edit=1
ID: 75558
User updated by: cyrille dot php at giquello dot fr
Reported by: cyrille dot php at giquello dot fr
Summary: Float to integer conversion
Status: Not a bug
Type: Bug
Package: *General Issues
Operating System: Ubuntu 16.04
PHP Version: 7.1.11
Block user comment: N
Private report: N
New Comment:
I do not want to round() but only truncate decimal part, if one exists.
You're example well show that integer casting make lost one unit on a number without decimal :
php > echo (int)( 103.24 * 6 * 10**2);
61943
Perhaps it's not a bug, I've just to learn the well use of float.
Thanks for your answer.
Cheers.
Previous Comments:
------------------------------------------------------------------------
[2017-11-23 11:06:20] spam2 at rhsoft dot net
> If you don't want truncating conversion
where are the decimal parts which could be truncated?
php > echo 103.24 * 6 * 10**2;
61944
------------------------------------------------------------------------
[2017-11-23 11:03:21] nikic@php.net
I have no idea what you tried in Python and Java, but it was clearly something else, because these
are standard floating point semantics that are consistent across all languages. I've just
checked (int)(103.24 * 6 * 10**2) on Python 3.6 and it indeed gives 61943, as expected.
If you don't want truncating conversion ("round down" for positive numbers),
don't use integer casts, or ensure that the floating point number represents an exact integer
beforehand, by using round().
------------------------------------------------------------------------
[2017-11-23 10:59:28] spam2 at rhsoft dot net
that's indeed a joke
php > echo 103.24 * 6 * 10**2;
61944
php > echo round(( 103.24 * 6 * 10**2));
61944
php > echo (int)( 103.24 * 6 * 10**2);
61943
------------------------------------------------------------------------
[2017-11-23 10:59:00] cyrille dot php at giquello dot fr
Another test script:
Test script:
---------------
php -r '$a=( 103.24*6*10**2); echo
$a,"=",intval($a),"=",intval(61944.0),"\n";'
Expected result:
----------------
61944=61944=61944
Actual result:
--------------
61944=61943=61944
------------------------------------------------------------------------
[2017-11-23 10:50:23] cyrille dot php at giquello dot fr
Description:
------------
Hi,
I've read the warning about float on documentation http://php.net/manual/fr/language.types.float.php
but for simple computing it should be nice if Php return value like other languages (Python &
Java).
The computing (int)( 103.24 * 6 * 10**2) should return 61944 nor 61943.
I've done the same with Java & Python (converting float result to integer) and get the
right result: 61944
Test script:
---------------
php -r 'echo (int)( 103.24 * 6 * 10**2),"\n";'
Expected result:
----------------
61944
Actual result:
--------------
61943
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=75558&edit=1
Thread (9 messages)