|
Модераторы: korob2001, ginnie |
|
cyberblade |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.2.2012 Репутация: нет Всего: нет |
Может я сам туплю или чего-то не понимаю... Использую модуль со CPAN - JSON
мне в ответе от сервера может прилетать значение с множеством нулей после запятой, например 0.000000001 до того как я начинаю парсить ответ сервера, число с плавающей точкой, после парсинга он его преобразует в целое (видимо для оптимизации): 1e-008 как можно отключить это кто-нить в курсе? Т. к. в разных полях могут приходить совершенно разные числа. Т. е. мне нужно сохранить оригинальный формат числа.
Спасибо за помощь. |
|||
|
||||
arto |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. 1e-008 - не целое
2. 1е-008 != 0.000000001 3. покажите данные |
|||
|
||||
cyberblade |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.2.2012 Репутация: нет Всего: нет |
Вот полный листинг программы вместе с тестируемым урлом.
Вот такие данные выдаёт api биржи "min_price":0.00000001," Вот так они сохраняются после парсинга JSON 'min_price' => '1e-008', |
|||
|
||||
arto |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. 0.00000001 и 1e-008, просто разная нотация:
# perl -e 'printf "%e %.8f\n", 0.00000001, 0.00000001' 1.000000e-08 0.00000001 2. perldoc JSON ... number A JSON number becomes either an integer, numeric (floating point) or string scalar in perl, depending on its range and any fractional parts. On the Perl level, there is no difference between those as Perl handles all the conversion details, but an integer may take slightly less memory and might represent more values exactly than floating point numbers. If the number consists of digits only, this module will try to represent it as an integer value. If that fails, it will try to represent it as a numeric (floating point) value if that is possible without loss of precision. Otherwise it will preserve the number as a string value (in which case you lose roundtripping ability, as the JSON number will be re-encoded to a JSON string). ... |
|||
|
||||
cyberblade |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.2.2012 Репутация: нет Всего: нет |
Ну я об этом в курсе, спасибо за попытку помочь...
Вопрос в другом был, есть ли возможность вообще отключить это без бубна? Без разницы как будут приходить данные хоть в строковом, хоть в числовом значении. Ибо JSON формат будет разный и прогонять определенные хеши через printf при выводе мягко говоря не очень правильный вариант. Кроме того это дополнительное процессорное время. Учитывая что такой хеш может быть размером более 20 мб. Ну и собственно я вам и говорил что JSON просто пытается конвертировать представление с плавающей запятой в целое значение если это возможно. Я читал этот мануал. Ибо в машинном представлении 1e-008 - это целое, но вы видите его разумеется как не целое )) Или может есть какие-то другие нормальные модули, которые без своевольностей работают? =) Буду благодарен за подсказку |
|||
|
||||
arto |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
могу порекомендовать либо filter_json_single_key_object, либо ковырять сам модуль.
Добавлено через 1 минуту и 54 секунды могу порекомендовать либо filter_json_single_key_object, либо править сам модуль. |
|||
|
||||
cyberblade |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 17.2.2012 Репутация: нет Всего: нет |
Спасибо, гляну
Это сообщение отредактировал(а) cyberblade - 21.5.2019, 13:13 |
|||
|
||||
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |