powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Про округление
9 сообщений из 9, страница 1 из 1
Про округление
    #32917563
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в следующем: делаю выборку из xls таблицы,
например: select round([data$summa.F1],2) from [data$summa]
(через ADO, провайдер MSDASQL, драйвер MS Excel Driver )
получаю следующую картину:
при значении data$summa.F1 равное, к примеру, 0.625 получаю 0.62,
т.е. округление на граничном значении идет в меньшую сторону.
Решил прибавить 0.001, а потом округлять:
select round([data$summa.F1]+0.001,2) from [data$summa]
имеем: значение равное 0.484408 +0.001=0.485408 и оно округляет вот так:
0.49, а хотелось 0.48 (
Можно вообще как-то установить в драйвере (например, при подключении) это самое округление?

Спасибо за внимание...
...
Рейтинг: 0 / 0
Про округление
    #32917896
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
double round(double x,int d) {
	double r=pow( 10 . 0 ,double(d));
	return rint(x*r)/r;
}
...
Рейтинг: 0 / 0
Про округление
    #32919280
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gardenman
Код: plaintext
1.
2.
3.
4.
double round(double x,int d) {
	double r=pow( 10 . 0 ,double(d));
	return rint(x*r)/r;
}


Нет, вопрос был не о том как написать функцию округления (слава Богу, это еще умеем), а как заставить драйвер (MS Excel Driver) правильно округлять значения в запросе select round(...)...
...
Рейтинг: 0 / 0
Про округление
    #32919342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой тип данных в поле F1 ?
...
Рейтинг: 0 / 0
Про округление
    #32919634
FishingIsGood
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, что делать с excel, но обычно в базах есть такие возможности округления:

TRUNC(<number> + 0.5e-2, 2)

Это будет работать для положительных чисел. В более общем случае:

TRUNC(<number> + SIGN(<number>) * 0.5e-2, 2)

Кроме того, мне кажется, есть вероятность, что твой ROUND работает правильо, а просто число 0.624999999.... отображается как 0.625 и раундится в 0.62, что так и должно быть. Это тоже стоит проверить, например таким образом: SELECT ROUND(0.625, 2) FROM ...
...
Рейтинг: 0 / 0
Про округление
    #32919963
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКакой тип данных в поле F1 ?
Тип - числовой. На самом деле я пытаюсь округлить произведение двух полей,
например, select round(data$summa.F1*data$summa.F2,2) (все поля -числовые)
На калькуляторе вычисляю произведение получаю 0.625 (3 знака после запятой). В самом Excel'e вычисляю произведение этих двух ячеек (с округлением) - получаю 0.63.
Вообщем, так и сделал: доп. колонку с вычислением округленного произведения и ее уже выбираю в запросе, например select data$summa.F3 from data$summa
Вот и доверяй после этого расчеты драйверу...
А может все-таки это как-то лечится ?
...
Рейтинг: 0 / 0
Про округление
    #32920072
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_VC
Тип - числовой. На самом деле я пытаюсь округлить произведение двух полей...
А может все-таки это как-то лечится ?
Числовые говоришь - это хорошо... а случаем не float ?

где-то стоит не та разрядность...
...
Рейтинг: 0 / 0
Про округление
    #32920244
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olol Alex_VC
Тип - числовой. На самом деле я пытаюсь округлить произведение двух полей...
А может все-таки это как-то лечится ?
Числовые говоришь - это хорошо... а случаем не float ?

где-то стоит не та разрядность...

А как в Excel'е задать числовой тип (float, double, long double,...) ?
Что-то я не встречал такой фичи... Есть там возможность форматированного вывода на экран, но внутреннее представление от этого все равно не меняется...

А сам числовой результат в приложении сохраняется в переменной типа double .
...
Рейтинг: 0 / 0
Про округление
    #32920477
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_VC
А как в Excel'е задать числовой тип (float, double, long double,...) ?
А сам числовой результат в приложении сохраняется в переменной типа double .

А вот и не правда ваша...
В Excel'е задается тип ячейки: Общий/Числовой/Денежный/Финансовый...

Я встречал где-то вопрос по финансовым округлениям... там 0.5 -> 0.0

Select Round... - где делает округление ?

Явно не в приложении и не в Excel'е... а что и как делает драйвер - не известно...

Попробуй сменить тип ячеек... и посмотри еще на Precision для этого поля в приложении...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Про округление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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