Я получаю список значений из моей базы данных, и я добавляю их, чтобы получить сумму всех строк. PHP не делает правильно, и я не могу понять, почему. Я работаю с тем, что делаю. Результат должен быть равен нулю, но PHP вычисляет результат как $ -1.78. Что плохого в следующем:PHP, добавляющий список значений, не является корректным
public function testAddition()
{
$data = ['23.21','-38.20','14.99','0.00'];
$total = 0;
foreach ($data as $value) {
$total += round(floatval($value), 2);
var_dump($value); // value to add
var_dump($total); // new total
}
// PHPunit results a success to zero, this is wrong, $total = -1.776...
$this->assertEquals(0, $total);
}
Результаты следующие:
string(5) "23.21" // value to add
float(23.21) // new total
string(6) "-38.20" // value to add
float(-14.99) // new total
string(5) "14.99" // value to add
float(-1.7763568394003E-15) // <-- this is wrong, should be zero
string(4) "0.00" // value to add
float(-1.7763568394003E-15) // new total
Спасибо Я нашел свою ошибку сразу после публикации этого. Наша форма HTML будет форматировать валюту с помощью «12, 345,67». У нас есть обычная подпрограмма, которая не переносит числовую строку из входной строки перед преобразованием в float, которая лишает экспонента. Глупый вопрос. – user3720435