Все остальные ответы НЕ ПРАВИЛЬНЫ, потому что деление PHP всегда будет возвращать значения с плавающей запятой, как четко указано в официальном руководстве PHP: арифметические операторы , за исключением случаев, когда два операнда являются целыми числами, которые можно разделить нацело.
На самом деле вопрос неверный: код должен выдавать 0,923..., как и ожидалось от вопрошающего.
Саркастически, ответ, за который проголосовали (пришел от @BulletProof47), является единственным другим, который просто НЕ НЕПРАВИЛЬНЫЙ (но также бессмысленный). Кто знает, о чем он думал, но держу пари, все знают, почему за него проголосовали: D
В случае, если кому интересно, базовая функция, которая выполняет деление в php, — это div_function
, расположенная в Zend/zend_operators.c
, как показано ниже:
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;
...
person
felix021
schedule
04.12.2015
0.92307692307692
, когда запускаю это - person Samuel Cook   schedule 20.06.2013php -v
илиphpinfo();
- person Jason McCreary   schedule 20.06.20131
с этим экстрактом? - person Barmar   schedule 20.06.2013