# Proposal: change precision for output functions

- Thread: https://externals.io/message/103695
- Original archive: https://news-web.php.net/php.internals/103695
- Started by Thomas Bley on 2019-01-07T17:24:39+00:00
- Messages: 2
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #103695 — Thomas Bley — 2019-01-07T17:24:39+00:00

URL: https://externals.io/message/103695#103695

Semen Dubina wrote on 07.01.2019 16:38:

> Hi, everyone!
> Original PR and description see: https://github.com/php/php-src/pull/3460.
> 
> Because of the accuracy constraint set by the 'precision' variable, debugging
> problems often occur, and many developers consider the limited accuracy to be a
> feature of the language.
> For better compatibility with other languages and predictable behavior, I
> suggest changing the default value of the variable 'precision' to -1.
> In the tracker you can find several bugs in which people trusted output of
> 'var_dump' and 'echo':
> https://bugs.php.net/bug.php?id=66866
> https://bugs.php.net/bug.php?id=66959
> https://bugs.php.net/bug.php?id=68551
> https://bugs.php.net/bug.php?id=73358
> 
> Examples: https://3v4l.org/Mr4KM
> 
> If you know a case when it will violate some task, describe it, please. I think
> that the trusting of FLOAT is a very bad practice.
> 
> -- Semen V. Dubina https://sam002.net/
> 
> -- 
> 
> 
> 

Hello,

good point, having:

echo ini_get('precision') . PHP_EOL;
echo ini_get('serialize_precision') . PHP_EOL;
echo json_encode(array('price' => round('45.99', 2))) . PHP_EOL;
echo (0.1+0.7), json_encode(0.1+0.7) . PHP_EOL;

gives (https://3v4l.org/ldgo8):

Output for 7.1.0 - 7.3.0
    14
    -1
    {"price":45.99}
    0.80.7999999999999999

Output for 5.3.6 - 5.6.38, 7.0.0 - 7.0.33
    14
    17
    {"price":45.99}
    0.80.8

what is the preferred way to upgrade from php 5.6 to 7.x in order to get the same results?

Regards
Thomas

---

## #103696 — Semen Dubina — 2019-01-07T18:17:45+00:00

URL: https://externals.io/message/103695#103696 · In reply to: #103695

> 07.01.2019, 20:24, "Thomas Bley" <mails@thomasbley.de>:
>
> Hello,
>
> good point, having:
>
> echo ini_get('precision') . PHP_EOL;
> echo ini_get('serialize_precision') . PHP_EOL;
> echo json_encode(array('price' => round('45.99', 2))) . PHP_EOL;
> echo (0.1+0.7), json_encode(0.1+0.7) . PHP_EOL;
>
> gives (https://3v4l.org/ldgo8):
>
> Output for 7.1.0 - 7.3.0
>     14
>     -1
>     {"price":45.99}
>     0.80.7999999999999999
>
> Output for 5.3.6 - 5.6.38, 7.0.0 - 7.0.33
>     14
>     17
>     {"price":45.99}
>     0.80.8
>
> what is the preferred way to upgrade from php 5.6 to 7.x in order to get the same results?
>
> Regards
> Thomas
>

Force 'serialize_precision': https://3v4l.org/coaWm
But remember - a float is not suitable for output. You need rounded and formatted manually.

P.S. Try with JS: `JSON.stringify(0.1+0.7);`

-- Semen V. Dubina https://sam002.net/
