У меня есть большое количество, которое я хочу разделить пополам. В этом примере позвольте использовать: 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;
}
(int) ( (strlen($number) / 2) );
Вы имели в виду strlen($number) >> 1;
?
Это, вероятно, неэффективный способ, но для задачи:
if (preg_match('~\A(?<n1>.?(?:.(?=.*(.(?(2)\2)\z)))+0*)(?<n2>.+)~', $number, $m))
echo $m['n1'] . "\n" . $m['n2'];
Простой цикл должен это сделать.
Что-то вроде этого -
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
*/
$half = (int) ( (strlen($number) / 2) );
-> Не делай этого! Пожалуйста! Это плохая идея, и трудно понять, чего вы хотите. Попробуйте$half = strlen($number) >> 1;
(аналогично удалению 1 бита, что аналогично делению на 2 и округлению) или$half = ceil( (strlen($number) / 2) );
(ceil()
округлите, используйтеfloor()
чтобы округлить вниз). Оба метода лучше и проще для чтения.