библиотеку юзать?
как вариант, можно BigInt приспособить
Это да, но мне и float pointing хватит для интегеров. А вообще есть какой-то один путь, по которому идёт?
в основном оперируют миллионными долями копеек (это случаи которые я знаю)
делают интами, да
используют множитель и округляют
зачем библиотека? просто в интах работаешь, а на клиент отдаешь флотом
А как работать с делением и умножением у интов?
А в чем проблема?
например нам нужно взять 1.25% от $0.40. Нам придётся всё это переводить в инты т.е. 125 * 40 = 5000, т.е. 0.005 Но так как мы храним в интах, то нам нужно запомнить где находится дробная часть, потом это вручную округлить (тоже хз по какому правилу это лучше делать). В итоге непонятно получится 0.00 или 0.01
Ты когда доллары интовые умножишь 100 раз на какие то проценты, то что бы отдать клиенту потребуется поделить на 100 только 1 раз
Как я могу поделить 1 цент на 100 чтобы получить доллары? Это же невозможно с интами
Цент в интах это 1, доллары - 1/100=0.01
в интах представить 0.01? как это сделать без тех манипуляций что я выше описывал?
Ничего не понял 0.01 это 1 (или 10 или 100, зависит от изначально выбранного коефициента) в интах
Если у меня всё хранится в интегерах, то как у меня получится 1/100 и получить 0.01?
Так 1/100 это 0.01, алло???
Да где в итах 0.01 есть
Епта блять пиздец Ты блять все доллары на 100 умножил, поэтому бля 1 ( У ТЕБЯ ) РАВЕН 0.01 ДОЛЛАРОВ
С чего это? Добрые как раз из-за копеек
Кстати а правда. В банках все в копейка в базах записано? Или рубли с запятой
В оракле записано в типе numeric/decimal))
Допустим у клиента в банке лежит сумма 1.01 рублей, ты ему начисляешь 50% каждый месяц от это суммы? Какую ты начислишь сумму в следующем месяце? Какая у него будет в итоге на счете?
нумерик с децималом — не плавучка
Ну 1.01 это 101 копейка. 50% с округление числа в меньшую сторону
Ну да, в этом и смысл?
Окей. Округляем в меньшую. Как ты решаешь в какую сторону округлять?
Спроси у банка, как ему нужно
Что как? В меньшую. Банки всегда так делают
Я имею ввиду, как технически ты округлишь интегер до меньшего?
В какую в какую) в меньшую написал же))
Ты при делении получишь флоут, который округлишь и кастанешь в
Мы использует интегеры (BigInt), а не float. Мы не можем получить дробную часть при делении
Тогда ты забиваешь на интегеры, и работает с деньгами в float
Ну у джс намбера макс значение 9007199254740991 Делим на сто, и это больше девяти тысяч триллинов, больше чем в мире есть денег Что у тебя за вычисления что нужны бигинты?
Биг инты я сказал для того, чтобы у вас не было соблазно поделить на 100 и получить дробную часть. Просто идея же в том, чтобы уйти от float и получать более точные значения при работе с деньгами
Вы в промежуточных значениях можете получить флоуты, но на выходе всегда переводить в инты
У меня тинькофф по 60 рублей за (уведомление об операциях снимает в месяц). НИ в каком банке на этот счёт не будут заморачиваться)
да дело не в этом. Дело в том как в техническом плане это конроллировать. С деньгами в Float работать вроде как нельзя из-за неточности. Решение проблемы это Integers или строки. Строки медленно, а с Integer нужно свой костыль писать (Как в Java BigDecimal)
Строки медленно, а настолько ли медленно что их нельзя использовать?
Обсуждают сегодня