Никто не рождается Старший, становится Старший!
Стать Старший-это трудоемкий процесс, и требует много пота. Как на рынке вычислительной расширилась в геометрической прогрессии, я решил начать серию постов, быстрые на все, что Старший должен знать. Давайте в первую очередь….
Когда будем моделировать Объект, или любой другой области, всегда воображали тип данных, прежде чем они даже начать писать дано.
Мы знаем, что имя String , lastname String, дата рождения, один Date дата активации будет long или Timestamp . Мы можем даже, в некоторых языках сомнения, если мы используем один Дата или Время . Но все это зависит от выбранного языка, верно?
Неправильно!
Все зависит от того, как значение хранится в байтах. Да! Вы думаете, что существует целое число? Или string? Нет, есть байт! Только байт! И эти значения представлены в байтах. Целое число, например, 4-байтовое выравнивание. Таким образом, всего 0 является 00000000 00000000 00000000 00000000. В Java краткости 0 00000000 00000000. Легко? Не так много…
Помните числовых множеств в математике ? Итак, целые числа, простые, теперь и другие?
Когда мне нужно значение не точное, float, например? Знаете, как это хранится? Usando anotaçao с плавающей запятой .
Тогда любой суммы должны быть сохранены в Float, верно?
Неправильно!
Давайте посмотрим вблизи, некоторые операции с float или double.
Понял, почему 2.01 + 2.01 + 2.01 + 2.01 +.040999999999999
? И не 10.041
? 🙄 Прокатка прокатка
Проблема точности с плавающей запятой
Да, это ошибка, достаточно известен. Вы можете найти его в интернете. Он появляется, когда сделаны несколько операций com С плавающей запятой.
Видел возникнуть в систем в производстве. Это была система управления запасами и закупками. Было несколько заказ покупками, но значение не продается, ударяя себя в поле. Эту ошибку, если дал в учетной записи, просто с 5 значениями. А что, если бы 5.000 значения?
Давайте посмотрим… И если somassemos 5.000
раз 2.01
? Должен дать 10.050
.
Ой! У нас были ошибки 0,676
! Благоговейный трепет благоговейный трепет 😮
Решение Java
Но тише, тише. В Java эта проблема была решена с созданием класса BigDecimal
.
Никакие операции кредитно-денежной должна быть сделана с float
или decimal
а я не видела, что ли. Эти значения следует читать как BigDecimal .
Следите За Обновлениями
- Если это значение инициализируется с
double
илиfloat
будет наследовать неточность первоначальной стоимости. - Этот класс является неизменным, так что будьте внимательны. Если вы называете процесс, не позволит изменить значение экземпляра, просто создать новую!
Сохраните тебя всю жизнь. Не хранить денежные значения в double
или float
. Не имеет значения язык или базы данных, которую вы используете.
Если вы не знаете как решить эту проблему. Не волнуйтесь, это нормально. Завтра появится новый язык или новую базу данных и 99,99999% разработчиков не sabaerão. Поиск в Google .
Оригинал: “https://dev.to/vepo/trabalhando-com-dinheiro-52g1”