Php отбросить целую часть

Php отбросить целую часть

Помните школьные основы арифметики? Описанные ниже операторы работают так же.

Арифметические операции

Пример Название Результат
+$a Идентичность Конвертация $a в int или float , что более подходит.
-$a Отрицание Смена знака $a .
$a + $b Сложение Сумма $a и $b .
$a — $b Вычитание Разность $a и $b .
$a * $b Умножение Произведение $a и $b .
$a / $b Деление Частное от деления $a на $b .
$a % $b Деление по модулю Целочисленный остаток от деления $a на $b .
$a ** $b Возведение в степень Возведение $a в степень $b .

Операция деления («/») возвращает число с плавающей точкой, кроме случая, когда оба значения являются целыми числами (или строками, которые преобразуются в целые числа), которые делятся нацело — в этом случае возвращается целое значение. Для целочисленного деления используйте intdiv() .

При делении по модулю операнды преобразуются в целые числа ( int ) (путём удаления дробной части) до начала операции. Для деления по модулю чисел с плавающей точкой используйте fmod() .

Результат операции остатка от деления % будет иметь тот же знак, что и делимое — то есть, результат $a % $b будет иметь тот же знак, что и $a . Например:

echo ( 5 % 3 ). «\n» ; // выводит 2
echo ( 5 % — 3 ). «\n» ; // выводит 2
echo (- 5 % 3 ). «\n» ; // выводит -2
echo (- 5 % — 3 ). «\n» ; // выводит -2

Источник

intdiv

Возвращает результат целочисленного деления num1 на num2 .

Читайте также:  Css стиль для символа

Список параметров

Знаменатель. Число, на которое делится num1

Возвращаемые значения

Целое частное от деления num1 на num2 .

Ошибки

Если num2 равен 0 , будет выброшено исключение DivisionByZeroError . Если num1 равен PHP_INT_MIN , а num2 равен -1 , то будет выброшено исключение ArithmeticError .

Примеры

Пример #1 Пример использования intdiv()

var_dump ( intdiv ( 3 , 2 ));
var_dump ( intdiv (- 3 , 2 ));
var_dump ( intdiv ( 3 , — 2 ));
var_dump ( intdiv (- 3 , — 2 ));
var_dump ( intdiv ( PHP_INT_MAX , PHP_INT_MAX ));
var_dump ( intdiv ( PHP_INT_MIN , PHP_INT_MIN ));
var_dump ( intdiv ( PHP_INT_MIN , — 1 ));
var_dump ( intdiv ( 1 , 0 ));
?>

int(1) int(-1) int(-1) int(1) int(1) int(1) Fatal error: Uncaught ArithmeticError: Division of PHP_INT_MIN by -1 is not an integer in %s on line 8 Fatal error: Uncaught DivisionByZeroError: Division by zero in %s on line 9

Смотрите также

  • / — деление рациональных чисел
  • % — остаток от деления
  • fmod() — остаток от деления рациональных чисел

User Contributed Notes 7 notes

This does indeed seem to be equal to intdiv:

function intdiv_1 ( $a , $b ) return ( $a — $a % $b ) / $b ;
>
?>

However, this isn’t:

function intdiv_2 ( $a , $b ) return floor ( $a / $b );
>
?>

Consider an example where either of the parameters is negative:
$param1 = — 10 ;
$param2 = 3 ;
print_r ([
‘modulus’ => intdiv_1 ( $param1 , $param2 ),
‘floor’ => intdiv_2 ( $param1 , $param2 ),
]);

Python style integer division, where the result is always rounded towards minus infinity.

1 // 2 is 0
(-1) // 2 is -1
1 // (-2) is -1
(-1) // (-2) is 0

function intdiv_py ( int $num1 , int $num2 ): int if ( $num1 < 0 xor $num2 < 0 )$num1 = abs ( $num1 );
$num2 = abs ( $num2 );
$remainder = $num1 % $num2 ;
return $remainder ? — 1 -( $num1 — $remainder ) / $num2 : — $num1 / $num2 ;
>
return intdiv ( $num1 , $num2 );
>

var_dump ( intdiv_py ( 1 , 2 )); // 0
var_dump ( intdiv_py (- 1 , 2 )); // -1
var_dump ( intdiv_py ( 1 , — 2 )); // -1
var_dump ( intdiv_py (- 1 , — 2 )); // 0
?>

@AmeenRoss
This does NOT seem to be equal to intdiv:

function intdiv_1 ( $a , $b ) return ( $a — $a % $b ) / $b ;
>
?>

See this example code

function intdiv_1 ( $a , $b ) return ( $a — $a % $b ) / $b ;
>

Without intdiv(), the following may be a good way (with $a and $b of type integer and not too big) :
(int)( $a / $b )
?>
because in case of divisible integers, the result will be integer and there is no risk of float appearing round but below their represented value (like the case (0.1+0.7)*10).
$a and $b really needs to be of type integer though.
If they are too big and indivisible, some precision will be lost during the conversion to float and the result may be inaccurate.

For earler versions PHP you may use:

function intdiv_1($a, $b) $a = (int) $a;
$b = (int) $b;
return ($a — fmod($a, $b)) / $b;
>

Источник

Как получить целую и десятичную часть числа?

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

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

Solutions Collecting From Web of «Как получить целую и десятичную часть числа?»

$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

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

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

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

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

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

Метод 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 

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

Передайте его как int и вычтите

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

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

$decimal = $your_number - (int)$your_number 

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

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

затем сравните $ decimal с 0, .25, .5 или .75

$float = 4.3; $dec = ltrim(($float - floor($float)),"0."); // result .3 

Метод Брэда Кристи, по сути, правильный, но его можно написать более кратко.

function extractFraction ($value) < $fraction = $value - floor ($value); if ($value < 0) < $fraction *= -1; >return $fraction; > 

Это эквивалентно его методу, но короче и, надеюсь, легче понять в результате.

Чтобы предотвратить дополнительный поплавок десятичной (то есть 50,85 – 50 дают 0,850000000852), в моем случае мне просто нужно 2 десятичных знака за денежные центы.

$n = 50.85; $whole = intval($n); $fraction = $n * 100 % 100; 
$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 

Мне было трудно найти способ фактически отделить сумму доллара и сумму после десятичной. Я думаю, что я понял это в основном и думал делиться, если у кого-нибудь из вас были проблемы

если цена 1234,44 … всего будет 1234, а десятичной будет 44 или

если цена 1234.01 … целое будет 1234, а десятичной будет 01 или

если цена равна 1234.10 … целое будет 1234, а десятичной будет 10

$price = 1234.44; $whole = intval($price); // 1234 $decimal1 = $price - $whole; // 0.44000000000005 uh oh! that's why it needs. (see next line) $decimal2 = round($decimal1, 2); // 0.44 this will round off the excess numbers $decimal = substr($decimal2, 2); // 44 this removed the first 2 characters if ($decimal == 1) < $decimal = 10; >// Michel's warning is correct. if ($decimal == 2) < $decimal = 20; >// if the price is 1234.10. the decimal will be 1. if ($decimal == 3) < $decimal = 30; >// so make sure to add these rules too if ($decimal == 4) < $decimal = 40; >if ($decimal == 5) < $decimal = 50; >if ($decimal == 6) < $decimal = 60; >if ($decimal == 7) < $decimal = 70; >if ($decimal == 8) < $decimal = 80; >if ($decimal == 9) < $decimal = 90; >echo 'The dollar amount is ' . $whole . ' and the decimal amount is ' . $decimal; 
val = -3.1234 fraction = abs(val - as.integer(val) ) 

Источник

Оцените статью