![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Tsahes |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 5.12.2006 Репутация: нет Всего: нет |
Посоветуйте, пожалуйста, как преобразовать double в int без потери точности. Случай очень частный - получение числа копеек.
Вывод:
Понятно, что double хранит значения с погрешностью, и надо округлять. Вопрос в том, какой именно из этих методов правильнее будет использовать:
|
||||||
|
|||||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Так все зависит от того, что надо.
Если честное математическое округление - тогда round Если же наименьшее целое по модулю (т.е. чиосло -3.8 округляется до -3) - тогда ceil |
|||
|
||||
maximUAs |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 20.11.2006 Репутация: нет Всего: нет |
Еще лучше использовать BigDecimal
|
|||
|
||||
y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
еще есть извращенский способ
![]() ![]()
Это сообщение отредактировал(а) y3u - 28.2.2007, 19:13 -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
Tsahes |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 5.12.2006 Репутация: нет Всего: нет |
Применительно к получению числа копеек из double, их не может быть либо на одну меньше, либо на одну больше ).
Если хранимое в double значение всегда немного меньше истинного, то я выберу Math.ceil(); Если хранимое в double значение может быть как немного меньше истинного, так и немного больше истинного, то я выберу Math.round(); Может, его и выбрать, как универсальный? Правильным ли будет выбор Math.round() без грабель для любых сумм? |
|||
|
||||
Tsahes |
|
||||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 5.12.2006 Репутация: нет Всего: нет |
Нда, почувствуйте разницу ).
Вывод:
Не прошло. Это сообщение отредактировал(а) Tsahes - 28.2.2007, 19:41 |
||||
|
|||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Tsahes, умные люди уже давно пришли к выводу, что суммами валют надо оперировать в целочисленном виде, а не в числах с плавающей запятой. Иначе у тебя погрешности будут чем дальше, тем крупнее. Ну, не может double хранить все числа доступного диапазона. Просто физически не может. Вот и хранит приближённо. В подавляющем большинстве случаев этой приближённости вполне достаточно.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
Tsahes |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 5.12.2006 Репутация: нет Всего: нет |
Кто спорит...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |