Как получить значение float при делении двух целых чисел? (PHP)

Привет, я пытаюсь разделить два целых числа: 12/13, но я всегда получаю целое число 1, а не десятичное число.

Я попробовал тип, литье значения, чтобы плавать перед рукой без успеха.

В основном все, что я хочу, это десятичный результат: 0.923 …

$x = 12; $y = 13; echo $value = $x / $y; //Would like to see 0.923 not 1 

Solutions Collecting From Web of "Как получить значение float при делении двух целых чисел? (PHP)"

В нормальных условиях ваш код должен возвращать плавающее значение 0.923076

Причина, по которой вы получаете округленное целое число, может быть связана с тем, что у вас ini setting для "precision" равный 0 , чтобы исправить это либо отредактировать php.ini либо использовать ini_set("precision", 3); в вашем коде перед расчетом.

Другой способ обхода этого – использовать BCmath :

 echo $value=bcdiv($a, $b, 3); 

И еще один способ без использования какого-либо расширения – использовать небольшой математический трюк, умножив значение, которое вы хотите разделить на 1000 чтобы получить 3 decimals .
Таким образом, вы разделите 12000 на 13 а вся часть будет равна 923 , а затем, умножая на 1е3, вставьте запятую / точку перед последними наиболее 3-мя местами.

 function divideFloat($a, $b, $precision=3) { $a*=pow(10, $precision); $result=(int)($a / $b); if (strlen($result)==$precision) return '0.' . $result; else return preg_replace('/(\d{' . $precision . '})$/', '.\1', $result); } 

echo divideFloat($a, $b); // 0.923

 echo $value = $x / (float) $y; 

если вы используете переменную $y как float, интерпретатор использует деление с плавающей запятой вместо целочисленного деления.

потому что по умолчанию предлагается использовать целочисленное деление на две целые переменные.

Было иначе, если вы использовали $y = 13.0 (переменная float как знаменатель): результаты всегда являются числом с плавающей запятой

Все остальные ответы НЕ ПРАВИЛЬНЫ, потому что разделение PHP всегда будет возвращать значения float, как указано в официальном руководстве 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; ... 

Просто используйте $ value = (float) ($ x / $ y); // Результат будет в float.

Ура!