2013-06-06 2 views
0

Я использую PDO для выполнения хранимых процедур в базе данных MSSQL. Все работает совершенно блестяще, кроме одного маленького зажима с PDOStatement::fetchAll(). При возврате поплавков из хранимой процедуры, вместо того, чтобы вернуть их правильное значение и знак после запятой, то возвращается значение с помощью дополнительных знаков после запятой, как так:PDO FetchAll() Number Rounding Issue

Database | Returned by PDO 
----------------------------------- 
614.9 | 614.89999999999998 
1.18  | 1.1799999999999999 

Кажется, как будто округление вопросов ... Я не понимаю, почему он пытается округлить номер в любом случае, конечно, он должен просто взять значение из базы данных, как она появляется?

Я попытался:

  1. Запуск хранимой процедуры на БД и это работает абсолютно нормально, поэтому это определенно что-то делать с PDO.
  2. Выполнение обычного запроса (вместо хранимой процедуры), и это все равно дает тот же результат.

Очевидно, что я могу форматировать число себя, но это не имеет значения, как я должен быть уверен, что я получаю из базы данных именно то, что находится в базе данных!

+1

Вы уверены, что это не так? То, что вы видите в «Базете», округляется? –

+0

Что такое тип данных для этого столбца? –

+0

@OneTrickPony Это справедливая точка! Как я мог знать? –

ответ

1

Возможно, проблема в том, как номера с плавающей точкой хранятся внутри PHP? Попытайтесь прочитать об этом in official docs.

UPD: Вы также можете указать результирующий столбец как строки (PDO :: PARAM_STR) с PDOStatement::bindColumn, но я не проверял.

+0

Это интересно, может быть, это я посмотрю. Спасибо –

+0

Я пробовал оба sugestions, к сожалению, не решил Я полагаю, что это связано с тем, как Microsoft обрабатывает Floating Points –

+0

, вы можете исправить свою подпрограмму, чтобы отображать возвращаемые значения в строку (если это опция для вас)? – pinepain