Разный вывод одного и того же значения в разных ситуациях - массив

Я не могу понять, почему эти массивы дают мне разные результаты:

• это значение 1/4 пришло из таблицы (дБ)

id | value
...
2  | 1/4
3  | 1/7

echo $matrix[0][2]; //show 1/4

• но если я делаю = 1/4

echo $matrix[0][2] = 1/4 // show 0.25

это происходит во всех значениях фракций. Например, 1/7 в первом примере показывают 1/7, а во втором показывают 0,142857142

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

Спасибо

3 ответа

Решение

Значение из базы данных является строкой, а значение, которое вы сами устанавливаете, является плавающей точкой.

Если вы используете MySQL, вы можете использовать mysql_fetch_field, чтобы узнать тип поля, что может быть полезно при работе с MyISAM (MySQL всегда возвращает строки).

У вас есть простое / уродливое решение:

$var = '1/4';
echo (float)eval('return '.$var.';');

Другое решение:

$var = '1/4';
$tmp = explode('/', $var, 2);
$tmp = $tmp[0]/$tmp[1];
echo $tmp;

Но я думаю, что лучшее решение - сохранить результат в вашей базе данных (например, 0,25) и преобразовать результаты в плавающее число, когда вы их получите.

В первом примере вы извлекаете строковые значения из базы данных. Во втором примере вы оцениваете математическое выражение.

Лучше всего сделать что-то вроде:

$t = explode("/", $matrix[0][2]);
echo ($t[0] / $t[1]);

Cos'в первом примере значения имеют строковый тип, а во втором вы вычисляете математическую функцию, а ответ имеет тип с плавающей запятой.

Если вы будете использовать эту конструкцию "echo $a = '1/4';" вывод будет таким же.

Другие вопросы по тегам