![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Danzan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.7.2011 Репутация: нет Всего: нет |
Привет. Делаю класс для систем счисления. Столкнулся с проблемой:
при дебаге вижу следующее: d=1.0011000111010001E42 есть вариант как работать с такими длинными дробями, чтоб основание не выводило? или лучшим вариантом будет сделать погрешность вычислений укоротив число и как это правильно реализовать на яве? Благодарю |
|||
|
||||
| newbieone |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.3.2010 Репутация: нет Всего: 1 |
Если пример действительно с потолка и вам нужно только, чтоб число выводилось в другой форме, есть класс Formatter из java.util.
Вывод:
Да, а то, что исходное число и его вывод на экран (в обоих формах записи) не совпадают, вас не смущает? Это сообщение отредактировал(а) newbieone - 2.7.2011, 10:54 |
||||
|
|||||
| Danzan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.7.2011 Репутация: нет Всего: нет |
Блин
java.lang.NumberFormatException: For input string: "0291418478875758E20". А если в десятичную ответ выдает "2.0291418478875758E20" пробовал на калькуляторе онлайн(калькулятор), решил как положено... как он справляется с такими длинными числами? посоветуйте вариант решения. Есть вариант как отловить это явление глбально? а не правит в каждой строчке кода, тк это чудо появляется и в ответе и на пути решения(возведение в степень итп) и приращивать костыль к каждой строке както не правильно... |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Используйте BigDecimal
|
|||
|
||||
| Danzan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.7.2011 Репутация: нет Всего: нет |
Спасибо Stolzen
BigDecimal поломал слегка мозг своей нестандартной арифметикой. Пока прикрутил как костыль, скорость работы упала в разы, нужно будет вылизывать код. |
|||
|
||||
| newbieone |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 14.3.2010 Репутация: нет Всего: 1 |
Danzan, а как вы шестнадцатеричные дроби из своих постов в BigDecimal загоняли?
Это сообщение отредактировал(а) newbieone - 3.7.2011, 10:41 |
|||
|
||||
| Danzan |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.7.2011 Репутация: нет Всего: нет |
никак, это класс для перевода в разные системы счисления, AFFFF.DFFFF как строка, дальше манипуляции с переводом и ответ в bigdecimal |
||||
|
|||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Danzan, Он долго работает, и при каждой операции создается новый объект - отсюда потеря скорости.
Для прироста скорости можно переписать BigDecimal под себя так, чтобы он был mutable. Это не составит большого труда (я когда-то переписывал, но у меня код не сохранился). Еще можно посмотреть этот вопрос на форумах по спортивному программированию, там может получится найти готовую реализацию. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |