Php 将美国建筑单位转换为十进制的最可靠方法?

Php 将美国建筑单位转换为十进制的最可靠方法?,php,validation,Php,Validation,我很抱歉,如果这是一个太容易的概念,但这里是我的 我以美国建筑单位的格式输入,并试图将它们转换为十进制单位 例如,以下是一些输入: 9'0“ 12'11-0“ 1'0-1/2“ 0'10-5/8“ 正如你所看到的,分界永远不会在同一个点上,所以如果我尝试将函数建立在位置的基础上,它会很快变得很大和混乱。我还用“除以零”来敲打墙壁,而没有一些过火的字符检查 很可能我已经盯着这个太久了,我的努力太复杂了。我正在使用PHP和MySQL,如果这对答案有任何影响的话 谢谢 试试看?大致上: preg_

我很抱歉,如果这是一个太容易的概念,但这里是我的

我以美国建筑单位的格式输入,并试图将它们转换为十进制单位

例如,以下是一些输入:

  • 9'0“
  • 12'11-0“
  • 1'0-1/2“
  • 0'10-5/8“
正如你所看到的,分界永远不会在同一个点上,所以如果我尝试将函数建立在位置的基础上,它会很快变得很大和混乱。我还用“除以零”来敲打墙壁,而没有一些过火的字符检查

很可能我已经盯着这个太久了,我的努力太复杂了。我正在使用PHP和MySQL,如果这对答案有任何影响的话

谢谢

试试看?大致上:

preg_match('/([0-9]+)\' ([0-9]+)(?:-(?:0|([0-9])\/([0-9]{1,2})))?\"?/', '1\' 0-1/2"', $matches);
$foot = intval($matches[1], 10);
$inch = intval($matches[2], 10);
$inch_suf1 = 0;
$inch_suf2 = 1;
if (count($matches) > 3) {
    $inch_suf1 = intval($matches[3], 10);
    if (count($matches) > 4)) {
        $inch_suf2 = intval($matches[4], 10);
    }
}
$inch = $inch + $inch_suf1 / $inch_suf2;
echo sprintf("%d feet and %.4f inch\n", $foot, $inch);
这假设所有的输入都是您建议的形式,也就是说,这里没有进一步的检查

匹配将从字符串中获取所有数字,并将其转换为整数,然后将英寸的精确数字计算为浮点(如果它仍然是一个整数,则为整数)


编辑:更新RegExp以识别分数部分并使结尾“可选”,并在输出字符串中添加“inch”。

我尝试了以下操作:
array(19){[“pf”]=>string(6)“13'1”[“sf”]=>string(6)“13'6”[“pm”=>string(6)“13'2”[“sm”=>string(10)“13'5-1/8”[“pa”=>string(10)“13'2-1/2”[“sa”=>string(10)“13'6-1/4”…}
并得到了回答:
1英尺和1.0000
对于每个测量在您的问题中,您没有指定结尾
是可选的。我现在更新了答案。此外,分数部分现在是可选的。该代码现在适用于您注释的所有输入值。