Как разбить поплавок в PHP? - PullRequest
2 голосов
/ 29 июня 2011

Допустим, у нас есть 12.054, и я хочу разделить его на три переменные, такие как $whole_number=12 $numerator=54 и $denominator=1000. Не могли бы вы помочь мне?

Ответы [ 3 ]

5 голосов
/ 29 июня 2011

Прямой подход - не очень академичный, но он работает для PHP; -):

$float        = 12.054;
$parts        = explode('.', (string)$float);
$whole_number = $parts[0];
$numerator    = trim($parts[1], '0');
$denominator  = pow(10, strlen(rtrim($parts[1], '0')));

Может потребоваться дополнительная работа, чтобы гарантировать, что пограничный случай тоже работает (конечный 0 s), без десятичной части и т. д.).

3 голосов
/ 29 июня 2011

Вот кое-что для начала, основанное на простых преобразованиях типов.

http://codepad.org/7ExBhTMS

Однако, есть много случаев, которые нужно рассмотреть как:*

Предыдущие / завершающие нули.12.0540 (для вас 540/10000 или 54/1000)

Обработка десятичных дробей без дробной части, например.12.00.

$val = 12.054;
print_r(splitter($val));

function splitter($val)
{
  $str = (string) $val ;
  $splitted = explode(".",$str);
  $whole = (integer)$splitted[0] ;
  $num = (integer) $splitted[1];
  $den = (integer)  pow(10,strlen($splitted[1]));
  return array('whole' => $whole, 'num' => $num,'den' => $den);
}



?>
2 голосов
/ 29 июня 2011

Попробуйте

<?
$no = 12.54;
$arr = explode(".", $no);

$full_no = $arr[0].$arr[1];

for($i = 0; $i < strlen($arr[1]); $i++) $denominator = $denominator."0";

$denominator = "1".$denominator;

$numerator = $full_no % $denominator;

$whole_no = $full_no / $denominator;

echo "Denominator = ". $denominator ."<br>";

echo "Numerator = ". $numerator ."<br>";

echo "Whole No = ". (int)$whole_no ."<br>";
?>

Выход:

Denominator = 100
Numerator = 54
Whole No = 12

Выход для 12.054:

Denominator = 1000
Numerator = 54
Whole No = 12

Я надеюсь, что это поможет вам ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...