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

Учитывая, скажем, 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'); 

CodePad .

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

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

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 

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

Итак, в основном …

если цена 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) )