Предварительное подтверждение преобразования из м (метров) в футы (') и дюймы (' ') - PullRequest
1 голос
/ 16 мая 2009

Я создаю таблицу для определения индивидуального ИМТ . Диаграмма (пока что) не требует ввода (потому что сначала я хочу заставить ее работать автономно), но она показывает (по параллельным осям) высоту в метрах и футах / дюймах.

Чтобы сделать это, я определяю начальную точку и диапазон счетчиков, а затем преобразую определенные переменные счетчиков в футы / дюймы, для чего я придумал (пожалуйста, не надо смеяться ...) следующее:

<?php
        $m; // height in m

        $hInInches = ($m*3.2808399)*12;

        $hInImp = explode(".",$hInInches);

        $hInFt = $hInImp[0];

        $hInInches = substr(12*$hInImp[1],0,2);
?>

Мне было интересно, есть ли у кого-нибудь более привлекательные, более экономичные и точные средства, с помощью которых это можно сделать, поскольку он выполняется внутри цикла for () для генерации x номеров строк (определенных elswhere), и я хотел бы (если это возможно) уменьшить нагрузку ...

Ответы [ 4 ]

2 голосов
/ 16 мая 2009

Вот подход, в псевдо-код:

inches_per_meter = 39.3700787
inches_total = round(meters * inches_per_meter)  /* round to integer */
feet = inches_total / 12  /* assumes division truncates result; if not use floor() */
inches = inches_total % 12 /* modulus */

Вы также можете вытянуть 12 в константу ...

1 голос
/ 16 мая 2009

Мне следует избегать функций манипуляции со строками, как уже было сказано Деробертом. В php код должен быть похож на следующий:

<?php
   $m=2; // height in m
    $hInFeet= $m*3.2808399;
$hFeet=(int)$hInFeet; // truncate the float to an integer
    $hInches=round(($hInFeet-$hFeet)*12); 
?>

Всего два умножения и вычитания (плюс вызов функции для округления) довольно экономичны, и код также вполне читабелен.

0 голосов
/ 05 июля 2017
     <?php echo metersToFeetInches(3); //call function    ?>

     <?php
        function metersToFeetInches($meters, $echo = true)
        {
            $m = $meters;
            $valInFeet = $m*3.2808399;
            $valFeet = (int)$valInFeet;
            $valInches = round(($valInFeet-$valFeet)*12);
            $data = $valFeet."&prime;".$valInches."&Prime;";
            if($echo == true)
            {
                return $data;
            } else {
                return $data;
            }
        }
        ?>

вывод: 9′10 ″

0 голосов
/ 16 мая 2009

Я не уверен, если вы считаете это красивее; однако, я бы сказал, что решение ajax / javascript может быть идеей. Когда пользователь вводит значение, результаты обновляются.

with regards to your code
* define M_TO_FEET, FEET_TO_INCH constants.
* define 2 equations feet_to_metres(value_to_convert) and metres_to_feet(value_to_convert)
* write the conversion code in each and let it return the result

and then you can create a simple if statement:
* If user inputs metres, then metres_to_feet(value_entered_by_user)
...