Разный вывод одного и того же значения в разных ситуациях - массив
Я не могу понять, почему эти массивы дают мне разные результаты:
• это значение 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';" вывод будет таким же.