powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как хранить деньги в int long or bigDecimal ?
53 сообщений из 53, показаны все 3 страниц
как хранить деньги в int long or bigDecimal ?
    #38911713
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
известно, что нельзя хранить деньги в типах данных с плавающей точкой.

и говорят, что мол используйте long.

давайте рассмотрим такую ситуацию: клиент совершает покупку за 10 копеек. по правилам системы деньги делятся в равных долях между 3 людьми. Получается по 3 копейки и одна остается. Как быть?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38911747
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правила придумывать. Предварительно посмотрев то, что уже придумали другие.

P.S. Никакой компьютер не позволяет хранить бесконечные дроби, хотя для периодические можно заменить на пару числитель-знаменатель.
Только обрабатывать замотаетесь и всё равно придётся решать вопрос: "Куда девать эту чёртову копейку?!"
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38911818
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

Я собственно и написал сюда, чтобы узнать что придумали другие
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38911837
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerдавайте рассмотрим такую ситуацию: клиент совершает покупку за 10 копеек. по правилам системы деньги делятся в равных долях между 3 людьми. Получается по 3 копейки и одна остается. Как быть?
BigDecimal/long/int не решает проблему "дробления копейки". Собсно эта задача вообще
нерешаема в плоскости типов данных.

Математики ее могут решить парадоксально верно но практически неприменимо.

Айтишники в общей своей массе тоже "дупля не стреляют"... ну посоветуют тебе
дробно-рациональный тип. И дальше что? Как его обналичить. Неясно.

Лучше всего ответ на данный вопрос даст любой бухгалтер. А в этом форуме лучше
подобное не спрашивать. Только флуд не по делу.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38911856
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

в long'ах хранят не целые копейки, а тысячные доли копеек. Или миллионные, смотря какая точность нужна.

Кроме бухгалтеров ещё можно спросить юристов. Было уже по крайней мере несколько дел с посадками: лёгким движением руки банковский софт начинает начислять оставшиеся доли копеек/центов на счёт обладателя этой руки. В крупных банках набегают огромные суммы...
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38911997
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joda Money
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38912124
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczJoda Money

Как эта библиотека поможет решить мою задачу?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38912299
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно остаток на отдельный счет, который деребанится когда будет возможно поделить на кол-во пайщиков.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38912438
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerизвестно, что нельзя хранить деньги в типах данных с плавающей точкой.

и говорят, что мол используйте long.

давайте рассмотрим такую ситуацию: клиент совершает покупку за 10 копеек. по правилам системы деньги делятся в равных долях между 3 людьми. Получается по 3 копейки и одна остается. Как быть?

Можно было бы тупо выдать третьему остаток (4 копейки), но когда придётся делить 20 копеек на шестерых - последнему достанется 5 копеек :)
Поэтому надо как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  long summ = 20;
  int count = 6;
-------------------
  double perPerson = summ * 1.0 / count;
  long total = 0;
  for (int i=0; i<count; i++) {
    int totalPlus1 = Math.round((i+1) * perPerson);
    person[i] = totalPlus1 - total;
    total = totalPlus1;
  }
  person[count-1] += (summ - total);


Если не напутал- выдаст 2му и 5му по 4 копейке, остальным- по 3.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38912495
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно хранить в любой формате.
главное чтоб все расчеты производились в этом же формате
когда доходит дело до выдачи наличных - машина списывает тоже в этом же формате, по логике и выдать оператор должен в этом же формате, но т.к. доли копеек от выдать не может - происходит округление на этапе выдачи
за потерю долей копеек никто не может предъявить- простая бессмыслица.
большая ошибка накапливается когда происходит округление на каждой операции, а при округлении на конечном этапе - спокойно можно пренебречь
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38912500
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerизвестно, что нельзя хранить деньги в типах данных с плавающей точкой.

и говорят, что мол используйте long.

давайте рассмотрим такую ситуацию: клиент совершает покупку за 10 копеек. по правилам системы деньги делятся в равных долях между 3 людьми. Получается по 3 копейки и одна остается. Как быть?

есть более жизненный пример -
ввод накладных в 1с - грамотный бух вводит с накладной цену с ндс и количество.
а реальная цена (без ндс) , которая хранится, получается обратным расчетом
правда есть индивидуумы, которые потом проверяют на калькуляторе....
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913246
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деньги хранить в жаве нужно только в копейках - иначе иногда на 1 копейку на "хитрых" суммах всегда погрешность, в итоге набегает тюремный срок. Именно поэтому банковский софт пишут не на жаве а на делфи -там для этого есть спец тип - Currency, в котором 4 знака после запятой и нет никаких проблемм с погрешностью.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913278
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerBlazkowiczJoda Money
Как эта библиотека поможет решить мою задачу?
Там куча Serializable типов для хранения валют.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913280
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийтам для этого есть спец тип - Currency, в котором 4 знака после запятой
А если надо 6?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913293
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола Питерскийдля этого есть спец тип - Currency, в котором 4 знака после запятой и нет никаких проблемм с погрешностьюА если больше 4-х знаков, тогда что ? Отсечение или округление ?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913305
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз верну мечтателей в начало топика.

10 копеек поделили на 3 чела. Согласно математике будет 10/3 (десять третьих). Несократимая
рациональная дробь. Вписать ее в ведомость нельзя. Обналичить в банкомате тоже.

Поэтому каждый чел получить по 3 копейки. И 1 копейка будет в остатке. Как быть с остатком? Кому выдать
одну копейку? Вот в чём вопрос автора.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913314
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКому выдать одну копейку? Вот в чём вопрос автора.
Выяснять бизнес-правила у аналитика.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913316
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВыяснять бизнес-правила у аналитика.
Либо у эксперта предметной области. Должностью аналитика у нас зачастую пренебрегают.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913321
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае - у бухгалтера.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913540
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в каком виде не храни , всегда возникнет вопрс об округлении . деление вседа есть.
тут надо на берегу договариваться о правилах игры , а это уже дело не прогаммистов.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913664
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийИменно поэтому банковский софт пишут не на жаве а на делфи -там для этого есть спец тип - Currency, в котором 4 знака после запятой и нет никаких проблемм с погрешностью.Вот не надо революционных песен - я знаю массу реальных примеров, когда четыре знака после запятой никого не спасают.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913717
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Четыре знака - это здесь вообще ни к месту.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913818
Фотография Dogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В операциях с деньгами долей копейки не бывает. Дробные копейки могут быть в цене, в строке, но не в сумме документа .

Пример с 10/3 копейки надуман. Однако за расхождение баланса на копейку отымеют банк и всю линейку причастных. Так что про бизнес-правила усё верно сказано.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913888
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМикола Питерскийтам для этого есть спец тип - Currency, в котором 4 знака после запятой
А если надо 6?

А скажи - в какой стране для копеек - т.е. дробных единиц надо не 2 знака а 6 ???

В делфи если положил в переменную Currency число в копейках - то при чтении читается точно такое число - т.е. никогда нет никакой погрешности.

А вот в жаве:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
     System.out.println("122.52 - 122 = " + (122.52 - 122));

        double cena = 122.52;

        int money_pref = (int) cena; // целая часть
        int money_suf = (int) ((cena - money_pref) * 100); // дробная часть

        System.out.println("В цене 122.52 " + money_pref + " рублей " + money_suf + " копеек") ;

        System.out.println("переменная BigDecimal(0.175) равняется: " + new BigDecimal(0.175));



а вот вывод:
Код: java
1.
2.
3.
122.52 - 122 = 0.519999999999996
В цене 122.52 122 рублей 51 копеек
переменная BigDecimal(0.175) равняется: 0.174999999999999988897769753748434595763683319091796875



А самое интересное что при записи в базу например в поле numeric(18,2) лишний "хвостик" отбрасывается - т.е. вы пишете в переменную число 0.175, а на самом деле там хранится вот это: 0.1749...., а в базу сохранится 0.174.
Далее надеюсь все понятно?
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38913952
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ делфи если положил в переменную Currency число в копейках - то при чтении читается точно такое число - т.е. никогда нет никакой погрешности.
ты это только 1с такое не рассказывай
там цена хранится с точностью float.
авторА самое интересное что при записи в базу например в поле numeric(18,2) лишний "хвостик" отбрасывается - т.е. вы пишете в переменную число 0.175, а на самом деле там хранится вот это: 0.1749...., а в базу сохранится 0.174.

не умеешь работать с базой не берись.
...
Рейтинг: 0 / 0
как хранить деньги в 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
как хранить деньги в int long or bigDecimal ?
    #38914752
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin, спасибо - буду курить scala.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38914759
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу перелезть сразу на javaFX (про swing знаю но никогда не пробовал) - какие подводные камни там меня могут ждать?
javaFX попробовал, понравилось, вроде и тормозов нет и под линюксом потестил - вроде все ок.
...
Рейтинг: 0 / 0
как хранить деньги в int long or bigDecimal ?
    #38915179
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все го то надо документацию посмотреть по BigDecimal ?!

а вот вывод:
Код: java
1.
2.
3.
122.52 - 122 = 0.519999999999996
В цене 122.52 122 рублей 51 копеек
переменная BigDecimal(0.175) равняется: 0.174999999999999988897769753748434595763683319091796875



А самое интересное что при записи в базу например в поле numeric(18,2) лишний "хвостик" отбрасывается - т.е. вы пишете в переменную число 0.175, а на самом деле там хранится вот это: 0.1749...., а в базу сохранится 0.174.
Далее надеюсь все понятно?


Код: java
1.
2.
3.
4.
5.
6.
7.
        BigDecimal b = new    BigDecimal(0.175);
        System.out.println(b);
        BigDecimal b1 = new    BigDecimal("0.175");
        System.out.println(b1);

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


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