1

我正在创建用于定义个人BMI的表。该图表(到目前为止)不接受输入(因为我首先想让它独立工作),但它确实(在平行轴上)显示了米和英尺/英寸的高度。

为了做到这一点,我定义了米的起点和范围,然后将定义的米变量转换为英尺/英寸,为此我想出了(请不要......)以下内容:

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

4 回答 4

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一个常数......

于 2009-05-16T15:36:10.443 回答
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); 
?>

只需两个乘法和一个减法(加上一个函数调用)就非常经济,而且代码也非常可读。

于 2009-05-16T16:21:52.173 回答
0

我不确定你是否认为这个更漂亮;但是,我认为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)
于 2009-05-16T15:20:53.677 回答
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″</p>

于 2017-07-05T08:06:10.633 回答