разный вывод одного и того же значения в разных ситуациях - массив - PullRequest
0 голосов
/ 28 октября 2011

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

• это значение 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 ]

2 голосов
/ 28 октября 2011

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

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

$t = explode("/", $matrix[0][2]);
echo ($t[0] / $t[1]);
1 голос
/ 28 октября 2011

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

Если вы используете 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) и преобразовывать результаты во всплывающее окно, когда вы их получаете.

1 голос
/ 28 октября 2011

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

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

...