@forwox

Как разложить массу, записанную в кг, на все единицы измерения?

Доброго времени суток!

Есть таблица вот такого вида:
610d9b09e612f700571902.png
Базовой единицей измерения в ней является килограмм.
Есть формула
$quantity = 12514.1212134545342; // КГ
$units = массив с данными из таблицы.
function fullNameUnit($quantity,$units) {
          $res = array(); 
          foreach ($units as $unit) {   
              if ($quantity==0) { break; }
              $res[$unit['code']] = rtrim(floor($quantity / $unit['base_unit_quantity'])); 
              $quantity = $quantity % $unit['base_unit_quantity'];
          }
          return $res;
}
dd($quantity . ' кг', fullNameUnit($quantity,$data);

Результат выполнения функции
610d9b8b77fb9459991797.png
Функция, по break останавливается на кг и не считает то, что находится после запятой в переменной $quantity, т.к. иначе появляется ошибка. Но нужно что бы вес выводился полностью, например вот так:
11 тонн 7 центнеров 34 килограмма 120 грамм 210 сантиграмм 454 миллиграмм 534 микрограмма

Как это исправить? Как можно доработать данную функцию?
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 2
@galaxy
// $quantity = $quantity % $unit['base_unit_quantity'];
$quantity -= $res[$unit['code']] * $unit['base_unit_quantity'];
Ответ написан
Комментировать
@forwox Автор вопроса
Спасибо, не думал что так просто решается )
НО этот способ работает не совсем корректно:
610e24c751621420066239.png
610e25320927c457599419.png
610e25b6c487a631715795.png
В общем, почему то есть погрешность в расчетах, на сколько я понял на самой маленькой единице измерения.
В чём может быть проблема?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы