powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как хранить деньги в int long or bigDecimal ?
25 сообщений из 53, страница 2 из 3
как хранить деньги в int long or bigDecimal ?
    #38913956
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерский
Код: java
1.
       double cena = 122.52;



Тебе - двойка. Дальше выделенного смотреть уже неинтересно.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913959
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ делфи если положил в переменную Currency число в копейках - то при чтении читается точно такое число - т.е. никогда нет никакой погрешности.
раздели сумму 100руб на 33шт - что получишь?
а потом умнож полученную цену на 10000шт
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914367
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийА вот в жаве:
Код: java
1.
        double cena = 122.52;




В java - BigDecimal, а double - у идиотов.
Ничего личного, просто факт.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914392
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начался уже откровенный срач. В жаве я начинающий - может чего-то и не понимаю, но я очень хорошо знаю делфи и уж поверьте такой хрени там нет.

Почему здесь "ошибка":
Код: java
1.
double cena = 122.52;



???

Почему одни из вас говорят что можно в финансовых расчетах использовать double, а остальные говорят что только BigDecimal?
Если переменная double - то в какой тип поля в базе данных нужно сохранять эту переменную?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914397
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийВ делфи если положил в переменную Currency число в копейкахПопробуйте, но только с double (а-ля Extended , или как там точно, уже не помню)
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914398
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема double в финансах - жуткий боян. Погугли хотя-бы статьи. Их полно.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914405
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийВ жаве я начинающий - может чего-то и не понимаю, но я очень хорошо знаю делфи и уж поверьте такой хрени там нет.

Есть.
То, что точные данные включая денежные, нужно хранить только в числах с фиксированной запятой- тема старше, чем 90% здешних обитателей. Требования на разработку Ada (точнее на конкурс, где она выиграла) были написаны что-то около 1980 года.

Микола ПитерскийПочему одни из вас говорят что можно в финансовых расчетах использовать double, а остальные говорят что только BigDecimal?
Если переменная double - то в какой тип поля в базе данных нужно сохранять эту переменную?

Я отвечаю только за себя.
В oracle, к примеру, number - это числа с фиксированной точкой. Вот в них и надо хранить деньги. В java - BigDecimal. Кто говорит про double - пусть дальше говорит.

В delphi Curency это как раз усечённый аналог BigDecimal, хоть и реализованный по-другому. Хочешь- напишу Curency в java - делов-то на час-другой.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914406
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanМикола ПитерскийВ делфи если положил в переменную Currency число в копейкахПопробуйте, но только с double (а-ля Extended , или как там точно, уже не помню)

Зачем мне пробовать double в делфи - если там для этого есть Currency? Я просто хочу узнать как в жаве можно работать с финансовыми данными? В какой тип переменной нужно сохранить число, например 122.52 чтобы там действительно было это число а не хрень в виде 122.519999999...
И поверьте я погуглил достаточно этот вопрос - но ответов нет - и я понял что на джаве финансовые расчеты не делают.
Я задал простые вопросы - ответьте пожалуйста на них, а не посылайте туда где нет ответов.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914411
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin, спасибо - теперь я понял.
Моя ошибка в том что я пытался в BigDecimal ложить double, а нужно строку и тогда все встает на свои места.
Только вот напрягает что в в BigDecimal нет простых арифметических операций (+, - и т.д) а все делается только через методы - почему так?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914417
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин - новые проблемы. Я на жаве пишу только под андроид - там тоже есть BigDecimal, но там нет методов для работы с данным типом данных с базой данных - т.е. в андроиде есть только getDouble и getFloat, а вот в обычной жаве попробовал:
Код: java
1.
2.
ResultSet rs 
rs.getBigDecimal()



тут есть getBigDecimal. А как тогда работать с финансами в андроиде?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914426
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерский А как тогда работать с финансами в андроиде?

Таки написать Curency? :D
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914432
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominМикола Питерский А как тогда работать с финансами в андроиде?

Таки написать Curency? :D

А можно написать Curency, в котором будут +,-,*,\ ??? Потому как если расчеты делать через методы - то крыша поедет - н-р какое среднеквадратическое отклонение по гаусу :)
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914446
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийAlexey Tominпропущено...


Таки написать Curency? :D

А можно написать Curency, в котором будут +,-,*,\ ??? Потому как если расчеты делать через методы - то крыша поедет - н-р какое среднеквадратическое отклонение по гаусу :)

Нет, нельзя. Значит long
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914455
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если использовать BigDecimal - то простое выражение 122.52*12.8/100 превращается в плохочитаемую хрень - а есть же много более сложных выражений со скобками, округлениями, получениями максимальних, мин. значений, средних внутри выражения, а если это делать через методы BigDecimal то одна строка выражения превращается в страницу кода, в котором как и что работает можно разобраться только под отладчиком.
Я понимаю что Object +(-*\) Object это неправильно.
А может есть всетаки что-то нормально удобоваримое для финансовых расчетов в жаве?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914464
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominНет, нельзя. Значит long

Ну так я так и выкрутился. Если это деньги - то храним их в копейках. Ноооо! Есть например содержание драгметаллов в изделии, сегодня это 3 знака после запятой, завтра 4, послезавтра 5 -то есть заранее "зарезервировать" нужный множитель не получится.
В общем - это тоже совсем не удобно.
Думал спрыгнуть с делфи на джаву - так как она намного удобнее, но из-за этой хрени переезд придется отложить навсегда.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914475
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийПотому как если расчеты делать через методы - то крыша поедет - н-р какое среднеквадратическое отклонение по гаусу :)Эт точно ! Можно запилить спец. класс по формату шаблона Строителя (pattern Builder):
Код: java
1.
x = new Currency("123.45").add(...).sum(...).mul(...).pow(...).аВотТеперьФсёПодсчитать();
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914505
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот не понимаю - жава такой класный язык, но почему в ней нет таких простых типов переменных как decimal, currency, которые есть даже в давно вымершем делфи? Или всетаки верно утверждение - что джава для финансовых расчетов не предназначена?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914507
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерский,

Та хрень, что в BigDecimal есть везде. Просто в BD она управляемая.
Всего делов то перед показом округлить.

Грубо говоря
Код: java
1.
  System.out.println(new BigDecimal("122.52").multiply(new BigDecimal("12.8")).divide(new BigDecimal("100")));



Выдает 15.68256

В чем тут сложность с вычислениями.
Вопрос "куда девать остаток копеек" надо решать с прикладниками в соответствии с тем, как принято. Но про них надо знать. И указывать необходимую точность в каждой операции , а не задумываться в конце - что это было?
Наличие черного ящика с думателем внутре создает иллюзию, что все посчитано верно.
Тут у бухгалтеров, банкиров , биржевиков и т.п. могут быть разные подходы.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914535
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С округлением вопросов нет - в жаве смотрю есть очень много разных типов округлений, а вот в делфи был только один и он для бухгалтерии не подходил - приходилось свой алгоритм писать.
Я понял - в жаве используем BigDecimal, а в андроиде long. И кто сказал - что код должен быть таким простым как в делфи :)
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914549
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерский,

Можно и в Ведройде BigDecimal. В конце концов, читать строки из базы тоже ведь не запрещено. :)
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914553
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Ну или Blob
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914567
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевМикола Питерский,

Можно и в Ведройде BigDecimal. В конце концов, читать строки из базы тоже ведь не запрещено. :)

Точно! Надо проверить - но наверное будет проблемы с разделителем (у нас точка, у них запятая)?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914570
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерский,

Ну уж сделать так, чтобы в базе был один и тот же разделитель не вопрос.
Можно хоть мантиссу с ординатой в разных строках хранить. :)
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914580
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ребята! Политику партии понял - наверно буду переезжать с абракадабры на жаву.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914677
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийДумал спрыгнуть с делфи на джаву - так как она намного удобнее, но из-за этой хрени переезд придется отложить навсегда.

Спрыгивать надо на scala. Для начала дополнительный бонус- синтаксис человеческий.
А потом и функциональщину подтянешь.

Правда как это на ведроид идёт- не знаю.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / как хранить деньги в int long or bigDecimal ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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