我有一个很大的数字要一分为二。对于这个例子,让我们使用: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'];