Предварительное подтверждение преобразования из м (метров) в футы (') и дюймы ('')
Я создаю таблицу для определения ИМТ человека. Диаграмма (пока что) не требует ввода (потому что сначала я хочу, чтобы она работала автономно), но она показывает (на параллельных осях) высоту в метрах и футах / дюймах.
Для этого я определяю начальную точку и диапазон счетчиков, а затем преобразую определенные переменные счетчиков в футы / дюймы, для чего я придумал (пожалуйста, не смейтесь...) следующее:
<?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."′".$valInches."″";
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)