powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему получается округленный результат?
8 сообщений из 8, страница 1 из 1
Почему получается округленный результат?
    #40130967
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть простая функция:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE FUNCTION `calc_payments_at_date`(`p_id` integer,`at_date` date) RETURNS float
BEGIN
	DECLARE result FLOAT;
	SELECT SUM(heating_sum) INTO result FROM payments WHERE id_proceeding=p_id AND payment_date<=at_date;
	RETURN result;
END


При выполнении
Код: sql
1.
SELECT calc_payments_at_date(122, '2021-12-01')


возвращается 18837,4, в то время как в реальности payments.heating_sum = 18837,38
Собственно, сабж.
Замена на
Код: sql
1.
RETURN ROUND(result, 2);

ничего не меняет.

PS MySQL 8.0.27
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40130969
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
Есть простая функция:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE FUNCTION `calc_payments_at_date`(`p_id` integer,`at_date` date) RETURNS float
BEGIN
	DECLARE result FLOAT;
	SELECT SUM(heating_sum) INTO result FROM payments WHERE id_proceeding=p_id AND payment_date<=at_date;
	RETURN result;
END


При выполнении
Код: sql
1.
SELECT calc_payments_at_date(122, '2021-12-01')


возвращается 18837,4, в то время как в реальности payments.heating_sum = 18837,38
Собственно, сабж.
Замена на
Код: sql
1.
RETURN ROUND(result, 2);

ничего не меняет.

PS MySQL 8.0.27


а если заменить FLOAT?
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40130971
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замена FLOAT на DOUBLE помогла. Но ответ на вопрос все равно интересен :)
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40130976
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
Замена FLOAT на DOUBLE помогла. Но ответ на вопрос все равно интересен :)


Это и есть ответ. Почитайте, что такое float
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40130984
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
возвращается 18837,4, в то время как в реальности payments.heating_sum = 18837,38

Не смог найти корректное упоминание этого поведения (кроме коммента под ответом здесь ), но в общем mysql округляет float до 6 знаков при выводе данных, если не попросить специально.
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40130986
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
Почитайте, что такое float

Вот честно, несколько раз прочитал https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html , но так и не понял почему 2 десятичных знака округлились до 1.
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40131012
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
так и не понял почему 2 десятичных знака округлились до 1.
Да потому что точности нехватает, ё моё!

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7547927b93bd60537776dbabefe6fca2

LiYing
Есть простая функция

Вот интересно, чем ты думал, делая тип выходного параметра FLOAT? у тебя небось payments.heating_sum - тоже FLOAT?

Для таких вещей есть тип данных DECIMAL. Причём обязательно с явным указанием количества десятичных знаков.
...
Рейтинг: 0 / 0
Почему получается округленный результат?
    #40131027
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Ой-ой, дядька, не ругайся :)
Мой косяк был с FLOAT - когда создавал функцию в дизайнере БД машинально выбрал этот тип вместо DOUBLE. My bad...
Akina
у тебя небось payments.heating_sum - тоже FLOAT?

Не все так плохо - DOUBLE там :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему получается округленный результат?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]