Ох уж эти фунты, нашему человеку очень сложно перестроиться на эту меру веса. Сегодня решил написать функцию по суммированию фунтов и унций.
Зачем? Затем, что в одном фунте 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; // выводим получившуюся сумму
}
И хорошо было бы еще обрабатывать дробные значения. Тогда было бы совсем айс. =)
да, насчет дробных, в принципе, можно подумать.
Теперь считает дробные, по сути и раньше считало – но разделитель точка мешал бы распарсить результат, заменил на точку с запятой.