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:
In Java
float a = (float) (103.24 * 6 * Math.pow(10,2)) ;
System.out.println( a ); // print 61944.0
System.out.println( (int) a ); // print 61944, not 61943
Previous Comments:
------------------------------------------------------------------------
[2017-11-23 11:15:03] cyrille dot php at giquello dot fr
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.
------------------------------------------------------------------------
[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
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=75558
--
Edit this bug report at https://bugs.php.net/bug.php?id=75558&edit=1
Thread (9 messages)