Как получить целую и десятичную часть числа? - PullRequest
86 голосов
/ 08 июля 2011

Учитывая, скажем, 1,25 - как мне получить «1» и «25» частей этого числа?

Мне нужно проверить, является ли десятичная часть .0, .25, .5 или .75.

Ответы [ 16 ]

151 голосов
/ 08 июля 2011
$n = 1.25;
$whole = floor($n);      // 1
$fraction = $n - $whole; // .25

Затем сравните с 1/4, 1/2, 3/4 и т. Д.


В случае отрицательных чисел используйте это:

function NumberBreakdown($number, $returnUnsigned = false)
{
  $negative = 1;
  if ($number < 0)
  {
    $negative = -1;
    $number *= -1;
  }

  if ($returnUnsigned){
    return array(
      floor($number),
      ($number - floor($number))
    );
  }

  return array(
    floor($number) * $negative,
    ($number - floor($number)) * $negative
  );
}

$returnUnsigned останавливает его от -1.25 до -1 & -0.25

33 голосов
/ 08 июля 2011

Этот код разделит его для вас:

list($whole, $decimal) = explode('.', $your_number);

, где $ whole - целое число, а $ decimal будет содержать цифры после десятичной точки.

19 голосов
/ 08 июля 2011

Просто чтобы быть другим:)

list($whole, $decimal) = sscanf(1.5, '%d.%d');

CodePad .

Как дополнительное преимущество, оно будет разделяться только тогда, когда обе стороны состоят из цифр.

13 голосов
/ 06 февраля 2016

Метод floor () не работает для отрицательных чисел.Это работает каждый раз:

$num = 5.7;
$whole = (int) $num;  // 5
$frac  = $num - (int) $num;  // .7

... также работает для негативов (тот же код, другое число):

$num = -5.7;
$whole = (int) $num;  // -5
$frac  = $num - (int) $num;  // -.7
6 голосов
/ 06 ноября 2015

короткий путь (используйте floor и fmod)

$var = "1.25";
$whole = floor($var);     // 1
$decimal = fmod($var, 1); //0.25

, затем сравните $ десятичное с 0, .25, .5 или .75

6 голосов
/ 05 декабря 2014

Приведите его к целому числу и вычтите

$integer = (int)$your_number;
$decimal = $whole - $integer;

Или просто для получения десятичного числа для сравнения

$decimal = $your_number - (int)$your_number
4 голосов
/ 09 мая 2013

Также есть функция fmod, которую можно использовать: fmod ($ my_var, 1) вернет тот же результат, но иногда с небольшой ошибкой округления.

2 голосов
/ 14 сентября 2017

PHP 5,4 +

$n = 12.343;
intval($n); // 12
explode('.', number_format($n, 1))[1]; // 3
explode('.', number_format($n, 2))[1]; // 34
explode('.', number_format($n, 3))[1]; // 343
explode('.', number_format($n, 4))[1]; // 3430
2 голосов
/ 14 марта 2014

Вот способ, которым я пользуюсь:

$float = 4.3;    

$dec = ltrim(($float - floor($float)),"0."); // result .3
1 голос
/ 28 марта 2018
$x = 1.24

$result = $x - floor($x);

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