Формат денег, рассчитанный умножением часов * норма (несколько записей в дБ)

Здесь я сталкиваюсь с трудной проблемой и не знаю, как ее решить.
У меня есть 2 разные таблицы. Таблица задач и таблица проектов. Таблица задач содержит время, потраченное (в секундах), скорость в час для этой конкретной задачи и к какому проекту относится эта запись. В общем, как-то так:

{id} - {seconds} - {rate} - {projectId}

Теперь я рассчитываю тарифную ставку в час для конкретной задачи, например:

function calc ($Totalseconds, $rate){
$minutes = $Totalseconds/60;      //minutes
$money = $rate * ($minutes / 60); //hours
return $money;
}
...
$money = calc($task['seconds'], $task['rate']);
$value = number_format($money,2); //ex. 1,824.69

Это, конечно, хорошо работает …. Например:

task1 is 1,824.69
task2 is 24.33
etc....

Пока у проекта есть только несколько задач, общая сумма выставления счетов за этот проект является правильной. Но когда у проекта есть более чем несколько задач, то общая стоимость немного отличается от того, когда я добавляю их все вручную с помощью калькулятора … Так что на другой странице я показываю общую тарификацию для конкретного проекта путем расчета всех задач и ставок для этого конкретного проекта.

Я «выбираю» все задачи из БД для определенного идентификатора проекта в массиве, а затем делаю:

//array projArray has the sum of all seconds and rate for every task under a specific project
//for example a project has 10 tasks with rate $12 p/h and 2 task with $10 p/h
//so projArray has 2 arrays. One for the total time in seconds for the 10 tasks + their rate and one for the 2 tasks + their rate.
$total = 0;
foreach($projArray as $value) {
$total += calc($value['TotalTime'], $value['rate']);
}
$Totalvalue = number_format($total,2);

И вот в чем проблема … Когда я вручную добавляю все тарифы для задачи, для конкретного проекта, с помощью калькулятора, я получаю 2,426.91 но эта последняя функция возвращает 2,426.92 вместо.

Секунды и скорости верны в обоих случаях. Я не понимаю, почему есть разница с окончательным значением?
Я думаю, чем больше у меня задач по проекту, тем больше разница? Прямо сейчас я тестирую вещи с 1-50 задачами … для каждого проекта

0

Решение

Пример данных:

a: 1,233
b: 1,233
c: 1,233

number_format((a + b + c), 2) = 3,70
number_format(a, 2) + number_format(b, 2) + number_format(c, 2) = 3,69

Когда вы вызываете number_format для каждой задачи индивидуально, 0,003 округляется.

Нечто подобное, вероятно, происходит в ваших расчетах.

1

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

Других решений пока нет …

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