PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
new01
Отправлено: 23 Июня, 2016 - 16:18:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




Здравствуйте!

В MongoDB хранится документ с такой переменной:
CODE (htmlphp):
скопировать код в буфер обмена
  1. "num": 0.6017737223301083

Посредством php нахожу этот документ
PHP:
скопировать код в буфер обмена
  1.  
  2. $collection = $connection->selectDB('admin')->selectCollection('games');
  3.                 $rangeQuery = array("idgame"=>$idGame);
  4. $game = $collection->findOne($rangeQuery);
  5.  

но при выводе переменной $game['num'] я получаю значение 0.60177372233011 ВМЕСТО 0.6017737223301083, то есть либо PHP, либо MongoDB округляет это число.

Вопрос:
Как получить исходное число без округления?

Буду признателен за любую помощь.

(Отредактировано автором: 23 Июня, 2016 - 16:18:48)



-----
new01
 
 Top
Sail
Отправлено: 23 Июня, 2016 - 16:29:58
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




new01, попробуйте выбрать из предлагаемых математических расширений.
(Добавление)
Хотя...
PHP:
скопировать код в буфер обмена
  1. $num =  0.6017737223301083;
  2. $str = number_format($num, 16, '.', '');
  3. var_dump($num, $str);
выдает:
Цитата:
float 0.60177372233011
string '0.6017737223301083' (length=18)
 
 Top
new01
Отправлено: 23 Июня, 2016 - 17:14:49
Post Id



Посетитель


Покинул форум
Сообщений всего: 301
Дата рег-ции: Июнь 2010  
Откуда: Челябинск


Помог: 1 раз(а)




Sail пишет:
new01, попробуйте выбрать из предлагаемых математических расширений.
(Добавление)
Хотя...
PHP:
скопировать код в буфер обмена
  1. $num =  0.6017737223301083;
  2. $str = number_format($num, 16, '.', '');
  3. var_dump($num, $str);
выдает:
Цитата:
float 0.60177372233011
string '0.6017737223301083' (length=18)

В бд он записан как число. И php его получаем числом и сразу округляем. Даже функция number_format не помогает, она добавляет 2 нуля в конце Недовольство, огорчение(


-----
new01
 
 Top
Мелкий Супермодератор
Отправлено: 23 Июня, 2016 - 17:27:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11874
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 612 раз(а)




На стороне PHP при выводе вы, скорей всего, упираетесь вот сюда: http://php.net/manual/en/ini.cor...hp#ini.precision Как раз дефолтные 14 разрядов.
Можно приводить к строке, как уже верно сказано, с помощью number_format.

Обязательно к пониманию:
new01 пишет:
В MongoDB хранится документ с такой переменной:

Не имеет отношения к тому числу, которое вы записывали. Монга, а вообще-то, BSON в целом, не умеет чисел с фиксированной запятой. Числа с плавающей запятой же по определению IEEE 754 могут в любой момент плыть в последних разрядах.

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


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB