2009-05-16 2 views
1

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

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

<?php 
     $m; // height in m 

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

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

     $hInFt = $hInImp[0]; 

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

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

ответ

2

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

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

+0

Благодаря derobert, концепция использования константы не произошло, пока я читал эти ответы ... Вы можете сказать, что я нуб в PHP? O.o еще раз спасибо! знак равно –

0

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

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

Смежные вопросы