如何在PHP中用12进行计算

时间:2014-03-20 08:16:43

标签: php math base

我已经构建了一个简单的模块化比例计算器,我可以输入一个基数(比如字体大小或行高)和一个重要数字(可能是列宽,页面宽度或其他字体大小)并选择一个比例(黄金)例如,比例),计算器将显示双链标度,用于页面布局。 请参阅下面的示例

我一直在想要允许用户输入点数和皮卡,然后在其中一个中显示比例。

问题是,picas是12个基数(12个点到异食癖),我想如果我可以将输入(类似于16p6)转换为12,我可以进行计算并从那里开始。

我无法弄清楚如何在另一个基础上进行基本计算。我真的只是乱来看看我能想出什么,让我知道你是否认为我正在咆哮错误的树。

所以我的问题是如何在12号基础上进行计算?

<?php
// basic modular scale calculation
$goldenRatio = 1.618;
$baseNumber = 16;

$i = 0;
while ($i <= 10) {
    echo round($baseNumber,1). "<br>";
    $baseNumber = $baseNumber * $goldenRatio;
    $i++;
}

echo "<hr><br>";

// Attempt at base 12 calculation 

$a=base_convert(16,10,12);
$b=base_convert(12,10,12);

$r = ($a*$b);

echo $a."*".$b."=";
echo $r;

我真的只是搞砸了我能想到的东西,如果你认为我正在咆哮错误的树,请告诉我。

更新

要解决从类似'12p6'这样的字符串将Picas转换为基点的问题,我最终使用正则表达式首先测试是否提供了Picas和Points,分割了Picas和Points。

function isPica($data) {
    if (preg_match('/^[0-9]+(?i)p([0-1]?[0-9])?$/i',$data)) {
        return true;
    }
    return false;
}

function makePoints($data) {
    $data = preg_replace('/^([0-9]+)((?i)p)(([0-1]?[0-9])?)$/i','$1.$3',$data);
    $data = explode('.',$data);
    $points = floor($data[0] * 12);
    $points = $data[1] + $points;
    return $points;
}

Modular Scale Calculator

Git Hub — Modular Scale Calculator

1 个答案:

答案 0 :(得分:1)

base_convert只转换字符串表示。您不能使用php中的base 12中的数字字符串进行计算。在处理英制单位时,你通常会有多个基地&#34;处理。所以必须手动完成。当你进行计算时,基数并不重要。

  1. 将所有不同单位转换为最小单位(分数)。 $ a = 3 * 12 + 7; // 3picas,7points。
  2. 进行计算。
  3. 转换回原始单位。

    $ points =(int)$ val%12; $ picas =(int)($ val / 12);

  4. $picas = floor($val / 12);
    $points = $val - 12*$picas;