Ох уж эти фунты, нашему человеку очень сложно перестроиться на эту меру веса. Сегодня решил написать функцию по суммированию фунтов и унций.
Зачем? Затем, что в одном фунте 16 унций, а когда есть несколько позиций, которые надо сложить можно мозг сломать.
Что она делает? Корректно подсчитывает сумму унций и фунтов, если унций 16 и более – транформирует их в фунты.
function calcweight($pound,$ounce)
{
$p=explode(",",$pound);
$o=explode(",",$ounce);
for ($i=1; $i<=count($p) +1; $i++)
{
$poundfinal=$poundfinal+$p[$i-1];
}
for ($i=1; $i<=count($o) +1; $i++)
{
$ouncefinal=$ouncefinal+$o[$i-1];
}
$on=fmod($ouncefinal,16); // остаток фунтов из унций
$pplus=floor($ouncefinal/16); // что надо будет приплюсовать в фунтам
$ouncefinal=$on; // плюсуем остаток из унций к фунтам
$po = $poundfinal+$pplus;
$ou = $ouncefinal;
return $po.';'.$ou; // выводим получившуюся сумму
}
Чтобы функция нормально работала нужно получить фунты и унции в таком виде
$pound="1,4,23,6,7"; $ounce="12.2,3,3.4,4,2";
Для этого можно воспользоваться циклом наподобие
while ($res=mysql_fetch_array($sql))
{
$pounds.=",".$res['pound'];
$ounces.=",".$res['ounce'];
}
Пример работы функции
echo calcweight("1.3,2.5,2.5,10","13.3,1.5,1,1"); //17.3;0.8
Обновлено: изменен разделитель на выходе, теперь это “;” – для подсчета дробных чисел.
К слову, скрипт можно подсократить за счет уменьшения вычислений в циклах:
function calcweight($pound, $ounce){
$p = explode(“,”, $pound);
$o = explode(“,”, $ounce);
$pf = 0;
$of = 0;
for($i = 0, $il = sizeof($p); $i < $il; $i++)
$pf += $p[$i];
for($i = 0, $il = sizeof($o); $i < $il; $i++)
$of += $o[$i];
$pplus = floor($of/16); // что надо будет приплюсовать в фунтам
$of = $of – $pplus*16; // остаток фунтов из унций
return ($pf + $pplus) . '.' . $of; // выводим получившуюся сумму
}
И хорошо было бы еще обрабатывать дробные значения. Тогда было бы совсем айс. =)
да, насчет дробных, в принципе, можно подумать.
Теперь считает дробные, по сути и раньше считало – но разделитель точка мешал бы распарсить результат, заменил на точку с запятой.