Предварительное подтверждение преобразования из м (метров) в футы (') и дюймы ('')

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

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

<?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 количество строк (определено здесь), и я бы хотел (если это возможно) уменьшить нагрузку...

4 ответа

Решение

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

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 к константе, а также...

Для меня вы должны избегать функций манипуляции со строками, как уже было сказано Деробертом. В 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); 
?>

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

     <?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″

Я не уверен, если вы считаете это красивее; однако я бы сказал, что решение 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)
Другие вопросы по тегам