Проблема десятичных разрядов с SQLite - PullRequest
5 голосов
/ 02 октября 2010

У меня есть таблица SQLite3 со столбцом, имеющим формат DECIMAL (7,2), но всякий раз, когда я выбираю строки со значениями, не имеющими ненулевого 2-го десятичного знака (например, 3,00 или 3,10), результат всегда имеет конечный ноль (s) отсутствует (например, 3 или 3.1). Можно ли как-нибудь применить функцию форматирования в операторе SELECT, чтобы получить требуемый 2dp? Я пробовал ROUND (), но это не имеет никакого эффекта. В противном случае мне придется постоянно преобразовывать полученные значения столбцов в требуемый формат для отображения (используя Python в моем случае) каждый раз, когда я делаю инструкцию SELECT, что является настоящей болью.

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

Любая помощь будет оценена.

Alan

1 Ответ

4 голосов
/ 03 октября 2010

SQLite внутренне использует двоичную арифметику IEEE с плавающей запятой, которая действительно плохо подходит для поддержания определенного числа десятичных знаков.Чтобы получить этот тип десятичной обработки, потребуется:

  1. Математика с фиксированной запятой или
  2. Десятичная с плавающей запятой IEEE (довольно редко) или
  3. Обработка всегоas strings.

Форматирование значений (преобразование из числа с плавающей запятой в строку) после извлечения - самый простой способ реализации вещей.Вы можете даже спрятать это внутри какой-то обертки, чтобы остальная часть кода не имела дело с последствиями. Но , если вы собираетесь потом делать арифметику со значением, тогда вам лучше не форматировать, а вместо этого работать со значением, возвращаемым запросом, потому что форматирование и преобразование обратно в двоичную плавающую точку (который использует Python, как и подавляющее большинство других современных языков), теряет много информации в уменьшенной точности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...