Wszystkie inne odpowiedzi nie są odpowiednie, ponieważ podział PHP zawsze będzie zwracać wartości float, jak wskazano wyraźnie w oficjalnym podręczniku PHP: Arithmetic Operators, z wyjątkiem przypadków, gdy dwa operandy są liczbami całkowitymi, które można równomiernie rozdzielić.
W rzeczywistości pytanie jest błędne: kod powinien wywołać 0.923 ..., jak oczekiwano od pytającego.
Sarkastycznie, odrzucona odpowiedź (pochodzi z @ BulletProof47) jest jedyną inną, która jest po prostu NIEPRAWDA (ale również bez znaczenia).Kto wie, co myślał, ale założę się, każdy wie, dlaczego został wybrany w dół: D
W przypadku, kto jest zainteresowany, podstawowa funkcja, która ma oddział w PHP jest div_function
, z siedzibą w Zend/zend_operators.c
, przedstawiono poniżej:
ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
{
zval op1_copy, op2_copy;
int converted = 0;
while (1) {
switch (TYPE_PAIR(Z_TYPE_P(op1), Z_TYPE_P(op2))) {
case TYPE_PAIR(IS_LONG, IS_LONG):
if (Z_LVAL_P(op2) == 0) {
zend_error(E_WARNING, "Division by zero");
ZVAL_BOOL(result, 0);
return FAILURE; /* division by zero */
} else if (Z_LVAL_P(op2) == -1 && Z_LVAL_P(op1) == LONG_MIN) {
/* Prevent overflow error/crash */
ZVAL_DOUBLE(result, (double) LONG_MIN/-1);
return SUCCESS;
}
if (Z_LVAL_P(op1) % Z_LVAL_P(op2) == 0) { /* integer */
ZVAL_LONG(result, Z_LVAL_P(op1)/Z_LVAL_P(op2));
} else {
ZVAL_DOUBLE(result, ((double) Z_LVAL_P(op1))/Z_LVAL_P(op2));
}
return SUCCESS;
...
Otrzymuję '0.92307692307692' po uruchomieniu tego –
sprawdź swój php.ini pod kątem wymuszonej liczby dziesiętnej ułamka lub dokładność coś takiego nie może zapamiętać, co jest nazywane. – Dave
Jaką wersję PHP używasz? 'php -v' lub' phpinfo(); ' –