Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 18.03.2018 00:23:21

Преобразование чисел с e

Всем привет.
Прошу помощи в простой и хитрой проблеме smile
Субд PostgresDB, есть таблица с полем типа float8. Есть некоторые данные, к примеру 0,00005, 0,00007 и тд. При выборе этих данных из таблицы в php массиве эти числа представлены в виде 8e-005, 5e-005 и тд. Как можно получать в их в первозданном виде?

Не в сети

#2 18.03.2018 14:57:28

Re: Преобразование чисел с e

Ты уверен, что числа возвращаются именно строками? PHP по умолчанию при выводе числа как строки может вывести его с e, но это не значит, что само число было строкой.

Что показывает var_dump? string или double? Если string, то достаточно каста в число:

var_dump( (float) '8e-005' );
// double(8.0E-5)

Не в сети

#3 18.03.2018 22:00:23

Re: Преобразование чисел с e

В базе они имеют тип float. Php преобразовывает такие дробные числа в вид отрицательной степенью 8e-005.
Решение sprintf('%f', '8e-005');
// 0.000080

Спасибо, что подключился к теме wink

Не в сети

#4 18.03.2018 22:15:36

Re: Преобразование чисел с e

Решение: sprintf('%f', '8e-005');

Мне кажется, это не совсем то решение, которое ты хочешь (во всяком случае, не идеальное). Здесь ты просто преобразуешь одну строку в другую строку. Скорее всего, смысл твоей преобразования записи с e - в том, чтобы получить числовой тип, а не просто строковую запись в более привычном виде.

Я к тому, что sprintf() возвращает все ту же string, а (float) - уже число. Чисто технически, если с 8e-005 и пр. предполагается работать как с числами (складывать и пр.), то sprintf() вообще не нужен, т.е. PHP прозрачно преобразует 8e-005 в число в момент использования ('8e-5' + 1). Итого у тебя лишний и ненужный вызов функции - если уж приводить к формату, то чтобы получился числовой тип и PHP не нужно было его неявно преобразовывать.

В редких случаях тип даже имеет значение. Например, strrchr() ведет себя по-разному в зависимости от типа второго аргумента:

echo strrchr('123', sprintf('%f', '1'));  // 123
echo strrchr('123', (float) '1');  // false

Не в сети

#5 20.03.2018 17:12:56

Re: Преобразование чисел с e

Мне нужно было получить из базы запись, которая содержит дробные числа типа float и вывести их на экран. Но php выводил в виде '8e-5' и нужен был метод, который преобразовал бы к виду 0.00008 как строку или как числовой тип не имеет значения в моем случае. Дополнительные операции над ними не требуются. smile

Не в сети

#6 20.03.2018 20:50:18

Re: Преобразование чисел с e

Но php выводил в виде '8e-5' и нужен был метод, который преобразовал бы к виду 0.00008

Тогда все верно, sprintf() это решение данной проблемы.

Не в сети

Подвал раздела