我正在创建用于定义个人BMI的表格。图表(现在)没有输入(因为我想让这个东西独立工作,首先),但它确实显示(在平行轴上)米和英尺/英寸的高度。
为了做到这一点,我正在定义仪表的起点和范围,然后将定义的仪表变量转换为英尺/英寸,这是我想出的(请不要笑< / em> ...)以下内容:
<?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 ),我希望(如果可能的话)减少负荷...
答案 0 :(得分: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
拉出为常量......
答案 1 :(得分:1)
对我来说,你应该避免使用derobert已经说过的字符串操作函数。 在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);
?>
只需要两次乘法和一次减法(加上一个圆形函数调用)非常经济,代码也很可读。
答案 2 :(得分: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)
答案 3 :(得分: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."′".$valInches."″";
if($echo == true)
{
return $data;
} else {
return $data;
}
}
?>
输出:9'10“