将一个数字一分为二,但在下半场以0开始时进行修正


Splitting a number in half but fixing when second half starts with 0

我有一个很大的数字要一分为二。对于这个例子,让我们使用:5639445604728832

当它被一分为二时,结果是这样的:

56394456
04728832

显然,第二个数字已经不是数字了。

我有以下代码,但我正在努力使其成为第一个数字的末尾添加0,直到第二个数字正式成为实数。有人能帮我解决这个问题吗?

function my_number_split($number)
{
    $half = (int) ( (strlen($number) / 2) ); // cast to int incase str length is odd
    $left = substr($number, 0, $half);
    $right = substr($number, $half);
    echo $left."<br />".$right;
}

这样重写函数就可以了。

function my_number_split($number)
{
    $half = ceil( (strlen($number) / 2) ); 
    while (0 == substr($number, $half, 1) && $half <= strlen($number) ) $half++;
    $left = substr($number, 0, $half);
    $right = substr($number, $half);
    echo $left."<br />".$right;
}

简单的循环应该可以做到这一点。
类似这样的东西-

function my_number_split($number)
{
    /* Logic to traverse ahead till a 0 is not found. */
    $str_len = strlen($number);
    $half_index = $str_len/2;
    while($half_index < $str_len){
        if($number[$half_index] != "0"){
            break;
        }
        $half_index++;
    }
    //Slicing string.
    $left = substr($number, 0, $half_index);
    $right = substr($number, $half_index);
    echo $left."<br />".$right;
}
my_number_split("5639445604728832");
/*
OUTPUT -
563944560
4728832
*/

这可能是一种效率低下的方法,但面临的挑战是:

if (preg_match('~'A(?<n1>.?(?:.(?=.*(.(?(2)'2)'z)))+0*)(?<n2>.+)~', $number, $m))
    echo $m['n1'] . "'n" . $m['n2'];