C 또는 Python과 같은 언어에서 정수를 정수로 나누면 정수를 얻습니다.
>>> 8/3
2
그러나 PHP에서 정수를 다른 정수로 나누면 /때때로 부동 소수점을 얻습니다.
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
8/3이 2가되도록 Python이나 C와 같이 나누고 싶습니다. PHP에서 어떻게 할 수 있습니까?
C 또는 Python과 같은 언어에서 정수를 정수로 나누면 정수를 얻습니다.
>>> 8/3
2
그러나 PHP에서 정수를 다른 정수로 나누면 /때때로 부동 소수점을 얻습니다.
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
8/3이 2가되도록 Python이나 C와 같이 나누고 싶습니다. PHP에서 어떻게 할 수 있습니까?
65 또는 6이 필요합니까?
ceil()하고 floor()그 라운드까지 다르게 기능입니다.
답변:
floor()반환하며 float당신이 얻을 수 있도록, 정수하지 2.0하지 2. 결과를 캐스트하여 정수를 얻었는지 확인합니다.(int)floor(8/3)
intdiv자릅니다. 반면 Python은 음의 무한대로 자릅니다.
(int)(1700000 / 300000);
유형 캐스팅을 사용하십시오.
(0.1 + 0.7) * 10입니다 7.99999999999999911182158029987476766109466552734375. (int)캐스트가이 값을 7로 자르는 것은 완벽하게 정확합니다. 여기에있는 질문과 대답 에서처럼 정수를 다른 정수로 나눌 때 이러한 부동 소수점 오류는 자르기 후 결과를 변경할 수 없습니다.
PHP에서 정수 나누기를 수행하는 방법에는 여러 가지가 있습니다. 언어에는 정수 나눗셈을위한 연산자가 없지만 부동 소수점 몫을 정수로 반올림하는 몇 가지 옵션이 있습니다.
<?php
$pos = 1;
$neg = -1;
$divisor = 2;
// No rounding (float division)
var_dump($pos / $divisor); // 0.5 (float)
var_dump($neg / $divisor); // -0.5 (float)
// Round toward zero (like C integer division)
var_dump((int)($pos / $divisor)); // 0 (int)
var_dump((int)($neg / $divisor)); // 0 (int)
// Round half away from zero
var_dump(round($pos / $divisor)); // 1 (float)
var_dump(round($neg / $divisor)); // -1 (float)
// Round down
var_dump(floor($pos / $divisor)); // 0 (float)
var_dump(floor($neg / $divisor)); // -1 (float)
# And on PHP 7 you can round toward zero with intdiv():
var_dump(intdiv($pos, $divisor)); // 0 (int)
var_dump(intdiv($neg, $divisor)); // 0 (int) Rounded toward zero
PHP 7에서는 intdiv($p, $q)정수 나누기를 직접 수행 하는 데 사용할 수 있습니다 . 이것은 (int)($p / $q)PHP 5 와 동일합니다 .
끝에 | 0을 추가하여 축약 형을 사용할 수 있습니다.
8/3 | 0
PHP 7 시도 intdiv()기능 :
통사론:
int intdiv($dividend, $divisor)
<?php
$dividend = 19;
$divisor = 3;
echo intdiv($dividend, $divisor);
?>
이전 버전의 PHP :
<?php
// Convert $total_minutes to hours and minutes.
$total_minutes = 640;
$minutes = $total_minutes % 60;
$hours = ($total_minutes - $minutes) / 60;
echo "Time taken was $hours hours $minutes minutes";
?>
PHP 버전 7 => intdiv(a,b)
그리고 7 미만 버전의 경우 (예 : 5.6) => (int)floor(abs(a/b))