我想用4位小数拆分一个4位数字。
输入:
Input 1 : 5546.263
Input 2 : 03739.712 /*(some time may have one zero at first)*/
结果:(数组)
Result of input 1 : 0 => 55 , 1 => 46.263
Result of input 2 : 0 => 37 , 1 => 39.712
P.S:输入是GPS数据,总是有4位数字/3位数字作为小数,有时一开始为零。
您可以使用以下函数:
function splitNum($num) {
$num = ltrim($num, '0');
$part1 = substr($num, 0, 2);
$part2 = substr($num, 2);
return array($part1, $part2);
}
测试用例 1:
print_r( splitNum('5546.263') );
输出:
Array
(
[0] => 55
[1] => 46.263
)
测试用例 2:
print_r( splitNum('03739.712') );
输出:
Array
(
[0] => 37
[1] => 39.712
)
演示!
^0*([0-9]{2})([0-9'.]+)
应该可以正常工作并做你想做的事:
$input = '03739.712';
if (preg_match('/^0*([0-9]{2})([0-9'.]+)/', $input, $matches)) {
$result = array((int)$matches[1], (float)$matches[2]);
}
var_dump($result); //array(2) { [0]=> int(37) [1]=> float(39.712) }
正则表达式尸检:
-
^
- 字符串必须从这里开始 -
0*
- 字符"0"重复 0 次或更多次 -
([0-9]{2})
- 匹配 0 到 9 之间的数字的捕获组,正好重复 2 次 -
([0-9'.]+)
- 匹配 0 到 9 之间的数字或重复 1 次或多次的句点的捕获组
(可选)您可以在末尾添加$
以指定"字符串必须在此处结束"
注意:由于我们在第一场比赛中投射到int
,因此您可以省略0*
部分,但如果您不打算投射它,请将其保留。