【问题标题】:Split 4 digit numbers拆分 4 位数字
【发布时间】:2013-10-18 18:58:42
【问题描述】:

我想用 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 位数字作为十进制,有时最初是零。

【问题讨论】:

  • 你能提供更长数字的例子吗?
  • 你使用什么语言?
  • @CIA 基于标签我假设是 php
  • @Duniyadnd,谢谢,输入是 GPS 数据,只是 4 位数字或一开始是零。
  • 您自己尝试过什么吗?显示您的代码。

标签: php split


【解决方案1】:

您可以使用以下功能:

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
)

Demo!

【讨论】:

  • @root:用输出和演示更新了答案 :)
  • 感谢 Amal Murali,在上次编辑移位结果修复时,没关系,我接受了。
  • @root:我不确定我是否理解? 上一次编辑替换结果修复 -- 你是什么意思?
  • 第一次,函数返回位置错误,0=>46.2631=>55。接受! :)
  • @root:是的,这是一个愚蠢的错误,已得到纠正。很高兴能帮到你:)
【解决方案2】:

^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 次​​li>
  • ([0-9\.]+) - 匹配 0 到 9 之间的数字或重复 1 次或多次的句点的捕获组

您可以选择在末尾添加$ 以指定“字符串必须在此处结束”

注意:由于我们在第一场比赛中转换为int,您可以省略0* 部分,但如果您不打算转换它,请将其保留在.

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    相关资源
    最近更新 更多