代码之家  ›  专栏  ›  技术社区  ›  David Thomas

美化从m(米)到英尺(“)和英寸(“”)的转换

  •  1
  • David Thomas  · 技术社区  · 15 年前

    我正在创建用于定义个人的 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 回复  |  直到 7 年前
        1
  •  2
  •   derobert    15 年前

    下面是一个方法,在psuedo代码中:

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

        2
  •  1
  •   Eineki    15 年前

    对我来说,您应该避免使用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); 
    ?>
    

    只有两个乘号和一个减号(加上一个函数的循环调用)是相当经济的,代码也相当可读。

        3
  •  0
  •   dassouki    15 年前

    我不确定你是否考虑 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)
    
        4
  •  0
  •   Sandeep Sherpur    7 年前
         <?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_2 10_3