За последние 24 часа нас посетили 16692 программиста и 1650 роботов. Сейчас ищут 1937 программистов ...

Сохранение числа с плавающей точкой. PHP -> MSSQL

Тема в разделе "PHP и базы данных", создана пользователем SergoFox, 27 авг 2017.

Метки:
  1. SergoFox

    SergoFox Новичок

    С нами с:
    27 авг 2017
    Сообщения:
    20
    Симпатии:
    2
    Прошу помощи в таком вопросе.
    При сохранении числа с плавающей точкой в БД число сохраняется с 15 знаками после запятой, например 41.26 сохраняется как 41.259999999999998.
    Проверка select из бд показывает 41.26, но при выборке на PHP снова показывает 41.259999999999998.
    число берется из <input type="number"/>. Пробовал сохранять и как текст и используя параметризированные запросы. В чем может быть моя ошибка?
     
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Ограничьте количество знаков для хранения.. а что храните? не деньги надеюсь?)
     
  3. SergoFox

    SergoFox Новичок

    С нами с:
    27 авг 2017
    Сообщения:
    20
    Симпатии:
    2
    Цена, сумма, количество.) К базе на изменение доступа не имею, к сожалению.
    --- Добавлено ---
    При сохранении в базу ручками - данные вытаскиваются нормально
     
  4. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    деньги так лучше вообще не хранить.. а количество, ну еще можно..
    а если не получится поменять настройки таблицы, тогда у меня нет вариантов.. хотя нет.. есть..
    хранить только целые числа... к примеру цена 10 рублей 78 копеек - хранить 1078 копеек - а где нужно делить на 10..
     
  5. SergoFox

    SergoFox Новичок

    С нами с:
    27 авг 2017
    Сообщения:
    20
    Симпатии:
    2
    При сохранении в базу ручками - данные вытаскиваются нормально.
    Изменять формат не имею права- над базой еще десктоп версия крутится
     
  6. SergoFox

    SergoFox Новичок

    С нами с:
    27 авг 2017
    Сообщения:
    20
    Симпатии:
    2
    сорри. При корректировке ручками та же ситуация
     
  7. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    ну у меня нет мыслей как это можно исправить без изменения типа колонки в таблице и/или формата хранения цены)
     
  8. SergoFox

    SergoFox Новичок

    С нами с:
    27 авг 2017
    Сообщения:
    20
    Симпатии:
    2
    Бли, пока сделал костыль - типа
    str(goods.field,16,2) AS quantity
    Но не нравится мне это..)
     
  9. Познающий php

    Познающий php Новичок

    С нами с:
    23 мар 2017
    Сообщения:
    381
    Симпатии:
    74
    В php есть функции для работы с числами произвольной точности, а в базе если тебе нужна точность их надо хранить с типом decimal/numeric. Этот тип как раз хранит их как строки. Вроде так.
     
  10. SergoFox

    SergoFox Новичок

    С нами с:
    27 авг 2017
    Сообщения:
    20
    Симпатии:
    2
    Я знаю про них. Но когда после такого
    Код (Text):
    1.  
    2. .SqlExec(" update table set quantity= cast('".$целаяЧастьСтрока.".".$дробнаяЧастьСтрока."' as numeric (16,2)) where ...)
    все равно показывается фигня, я вообще потух..))
    В базе все ок)