с плавающей запятой — PHP: округление числа_формат

Привет у меня возникла проблема с округлением чисел до -0 вместо просто 0

код:

<?php
$num= 0.000000031;

$round = number_format((float)$num, 1, '.', '');

echo $round * -1;
?>

выход:
-0

ожидаемый результат:
0

Я искал любое решение, но ничего не нашел.

любезно объясните & помогите мне, почему он округляется до -0 вместо 0? благодарю вас

8

Решение

Не округление делает это -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)
6

Другие решения

поскольку number_format возвращает строку, вам нужно привести ее, чтобы получить ожидаемый результат.

<?php

$num= 0.000000031;

$round = number_format((float)$num, 1, '.', '');

echo (int)$round * (-1);  //print 0

?>

PHP Sandbox

0

Ваш PHP-код неорганизован.

Я предполагаю, что переменная $ xx во второй строке равна $ num.

Затем вы должны сначала выполнить все операции (уровень операций), а затем сделать презентации (уровень представления):

<?php
// Operation layer
$num = 0.000000031;
$round = $num * -1;

// Presentation layer
echo number_format($round, 1, '.', '');

Когда вы делаете number_format, получите строку, а не число.

0
По вопросам рекламы [email protected]