Привет у меня возникла проблема с округлением чисел до -0 вместо просто 0
код:
<?php
$num= 0.000000031;
$round = number_format((float)$num, 1, '.', '');
echo $round * -1;
?>
выход:
-0
ожидаемый результат:
0
Я искал любое решение, но ничего не нашел.
любезно объясните & помогите мне, почему он округляется до -0 вместо 0? благодарю вас
Не округление делает это -0.
Переменная $ round содержит это перед последней строкой:
string(3) "0.0"
Вы можете убедиться в этом, добавив эту строку:
var_dump($round);
до эха.
Таким образом, если вы умножите «0.0» (строку) на -1, то результатом будет «-0»
Потому что (строка) 0 преобразуется в (плавать) 0 до умножения и
(float)0 * -1 = -0
php5 -r 'var_dump((float)0*-1);'
float(-0)
Что совершенно нормально в зависимости от поведения плавающих чисел. (Подробнее: http://en.wikipedia.org/wiki/Signed_zero )
Если это проблема, вы можете добавить 0, чтобы избежать этой «магии»:
php5 -r 'var_dump((float)0*-1+0);'
float(0)
поскольку number_format возвращает строку, вам нужно привести ее, чтобы получить ожидаемый результат.
<?php
$num= 0.000000031;
$round = number_format((float)$num, 1, '.', '');
echo (int)$round * (-1); //print 0
?>
Ваш PHP-код неорганизован.
Я предполагаю, что переменная $ xx во второй строке равна $ num.
Затем вы должны сначала выполнить все операции (уровень операций), а затем сделать презентации (уровень представления):
<?php
// Operation layer
$num = 0.000000031;
$round = $num * -1;
// Presentation layer
echo number_format($round, 1, '.', '');
Когда вы делаете number_format, получите строку, а не число.