![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
Столкнулся с такой вот проблемой :
Выполняя запрос (select mynumber from mytable)в пл\скл девелопере получаю 9.8, а при использовании
Получаю 9.799999999999999 Подскажите с чем это связано и как побороть ? |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
если побороть в смысле округлить
1 - это количество знаков после запятой. второй параметр - способ округления, их несколько разных есть. |
|||
|
||||
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
||||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
посмотри такой код. может пригодится?
|
|||
|
||||
KostenkoSergey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 31.10.2005 Где: Kiev Репутация: 3 Всего: 8 |
- не совсем понял, что ты хотел показать фрагментом кода.
Свой вопрос пока решил следующим образом:
ps буду надеяться размерности флоата будет достаточно. Это сообщение отредактировал(а) KostenkoSergey - 11.9.2007, 12:35 |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
в учебнике у меня написано:
|
|||
|
||||
niasilil |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
bump
Правлю чужой код, сравниваю баланс - фиг вам, куда то подевался цент. Пытаюсь найти, все вроде нормально, но цента нет. Было что то типа 89.21 стало несколько платежей но в сумме 89.20 Оказалось оно - кто то использовал BigDecimal(double) вместо BigDecimal(String). Вообще непонятен глубокий смыслтакого поведения конструктора с double. Ведь ясно же что баг, так нет, записали в API как feature. -------------------- SCJP 5.0, SCJD |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Это не баг, это свойство double. Машинные числа с плавающей точкой нельзя использовать для точных расчётов в принципе. -------------------- ![]() ![]() |
|||
|
||||
niasilil |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
Баг это, баг. Просто его объявили фичей.
Ничего мы тут не считаем, просто создаем объект. Можно просто в лоб заменить весь конструктор
на
и все будет работать как и должно. Мне Рабинович напел что в сях такого безобразия нет, сам не проверял. Вот
выдает как и положено 0.1000000000000000055511151231257827021181583404541015625 0.1 -------------------- SCJP 5.0, SCJD |
||||||
|
|||||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
||||
|
||||
niasilil |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
и как же это не баг если два конструктора выдают два разных значения? просто из общих соображений.
dorogoyIV, какую конкретно часть первого курса высшей математики вы имеете ввиду? я как бы немного с этим знаком, кандидат физмат наук как никак. Было бы все же полезнее аргументировать, а не так. Я не обязан вам верить на слово. фиг с ним, баг это или не баг. Но вот объясните мне зачем используется два разных способа создания объекта в двух разных конструкторах? Какой в этом смысл? По мне так это бред полный. -------------------- SCJP 5.0, SCJD |
||||
|
|||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
||||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Не разные способы конструкции приводят к отклонениям, а разные значения параметров. Иными словами, 0.1D - совсем не то же самое, что "0.1". Именно об этом и просил вас вспомнить dorogoyIV. -------------------- ![]() ![]() |
|||
|
||||
avvo |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 11.9.2007 Репутация: нет Всего: 4 |
IEEE 754
А высшая математика тут, да, не при чем. Тут только "низшая", то бишь арифметика. ![]() Да и в том, что два разных конструктора создают два разных объекта, мне, как простому инженеру, кажется, ничего удивительного нет. |
|||
|
||||
niasilil |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
Хотел поспорить, аргументы подготовил, но все стер нафиг - разговор немого с глухим получается.
Вы мне объясняете почему теряется точность, так это очевидно почему. И из кода конструкторов видно. Мне совсем неочевидно другое. Как по вашему, где может применяться конструктор new BigDecimal(double d), если сразу в API написано что результат непредсказуем? Пример бы помог меня убедить. Если примеров нет, то предлагаю согласиться что разумно было бы depricate этот конструктор и все тут. -------------------- SCJP 5.0, SCJD |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |