Фев 082012
 

Ох уж эти фунты, русскому человеку очень сложно перестроиться на эту меру веса. Сегодня решил написать функцию по суммированию фунтов и унций.

Зачем? Затем, что в одном фунте 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

Обновлено: изменен разделитель на выходе, теперь это «;» — для подсчета дробных чисел.

Дорогие читатели! Мною было принято решение закрыть комментарии на блоге. Теперь все обсуждения переносятся на недавно открытый форум, ввиду того, что формат сообщений там намного удобней для обсуждения. Не стесняйтесь задавать любые вопросы по тематике блога! Я всегда на связи.
Перейти на форум
.
 Опубликовано в 10:19 пп

  3 комментария в “Суммирование фунтов и унций”

  1. К слову, скрипт можно подсократить за счет уменьшения вычислений в циклах:

    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; // выводим получившуюся сумму
    }

    И хорошо было бы еще обрабатывать дробные значения. Тогда было бы совсем айс. =)

    • да, насчет дробных, в принципе, можно подумать.

    • Теперь считает дробные, по сути и раньше считало — но разделитель точка мешал бы распарсить результат, заменил на точку с запятой.

Извините, форма комментирования закрыта в данный момент.