1. Введение в BigDecimal
BigDecimal состоит из целочисленного немасштабного значения любой точной и 32-разрядной целочисленной шкалы. Если он нулевой или положительный, шкала - это количество цифр после десятичной точки. Если это отрицательное число, умножьте немасштабное значение числа на отрицательную масштабную мощность 10. Следовательно, значение, представленное BigDecimal, составляет ( unscaledValue × 10-scale ).
2. Введение BigDecimal
При использовании языков программирования Java, таких как банковское дело и финансы, которые требуют высокого расчета численных значений, мы часто используем BigDecimal и BigInteger вместо int , long , float и double типов, особенно при работе с данными с плавающей точкой.
Давайте сначала посмотрим на демонстрацию кода с использованием основного типа данных double для вычисления и результатов печати:
открытый класс Mainclass {public static void main (string [] args) {System.out.println (0,02+0,01); System.out.println (0,05+0,01); }}Результаты следующие:
0,030.060000000000000000000000005
Вопрос в том, почему появляются данные со вторым результатом? Основная причина заключается в том, что наш компьютер является бинарным, а бинарный не может точно представлять номер с плавающей запятой. Существуют определенные ошибки, когда ЦП использует метод «Mandrel и Exponent» (метод научных обозначений) для выражения номеров с плавающей запятой. Следовательно, когда требования к точности данных относительно высоки, больший класс еще должен использоваться, хотя скорость расчета немного медленнее.
3. Бигдецимальное использование
Существует два способа создания BigDecimal объекта: конструктор и публичный статический метод ( BigDecimal.valueOf ). Два пункта необходимо обратить внимание на:
1. Конструктор включает в себя две формы, которые используют основные типы данных и строки в качестве параметров. Последнее рекомендуется, например: new BigDecimal(Double.valueOf(0.09)) . Вы можете попробовать это. Выходной результат System.out.println(new BigDecimal(0.06).toString()); Заявление: 0,059999999999999999997779553950749686919152736663818359375
2. Когда десятичный запятой печатает журнал или преобразуется в основные типы данных, попробуйте использовать публичный метод xxxValue() , такой как doubleValue() вместо простого и грубого toString()
4. Большой режим округления
Хотя база данных хранит высокое число с плавающей запятой, обычно необходимо ограничить количество десятичных цифр при отображении в приложениях, таких как от двух до трех десятиков. В настоящее время вам нужно использовать функцию SetScale ( int newScale, int roundingMode ). Как публичная статическая переменная BigDecimal, существует много правил работы для режима округления (режим округления), и существует восемь общественных типов. Вот объяснение, и официальный документ также представляет его.
1. Round_up
Вдали от нуля. Отказаться от ненулевой части и добавьте одно число примыкания к ненулевой части.
2. Round_down
Круглый в направлении, близком к нулю. Отказаться от ненулевой части, и в то же время смежное одно число деталей не будет отброшено, добавив одну в ненулевую часть и перехватывая поведение.
3. Round_ceiling
Круглый в направлении бесконечного. Если это положительное число, результат округления совпадает с Round_up; Если это отрицательное число, результат округления совпадает с Round_down. Примечание. Этот режим не уменьшает размер значения.
4. Round_floor
Круглый в направлении негативной бесконечной. Если это положительное число, результат округления совпадает с Round_down; Если это отрицательное число, результат округления такой же, как Round_UP. Примечание. Этот режим не увеличивает размер значения.
5. round_half_up
Закругление до «ближайшего» числа - это режим округления вверх, если расстояние до двух смежных чисел равна. Если часть отбрасывается> = 0,5, поведение округления такое же, как Round_up; В противном случае поведение округления такое же, как Round_down. Этот шаблон - это то, что мы часто называем наше «округление».
6. Round_half_down
Закругление до «ближайшего» числа, если расстояние до двух смежных чисел равно, является режимом округления. Если отброшенная часть> 0,5, поведение округления такое же, как Round_up; В противном случае поведение округления такое же, как Round_down. Эта модель - то, что мы часто называем нашими «округлениями».
7. Round_half_even
Круглее до «ближайшего» числа, если расстояние до двух соседних чисел равно, соседние четные числа округлены. Если нечетное число слева от детали отбрасывается, поведение округления такое же, как Round_half_up; Если это равномерное число, поведение округления такое же, как Round_half_down. Примечание. Этот режим округления сводит к минимуму ошибку накопления при повторной серии расчетов. Этот режим округления также называется «метод округления банкира» и в основном используется в Соединенных Штатах. Шеский раунд в шесть и пять в две ситуации. Если предыдущий является нечетным номером, он введет эту позицию, в противном случае она будет заброшена.
8. Round_unnecessary
Работа запроса утверждения имеет точные результаты, поэтому округление не требуется. Если этот режим округления указан для операции, которая получает точный результат, бросается арифметикексация.
Ниже давайте приведем пример, чтобы проиллюстрировать численное расчет, результаты в различных режимах округления, сохраняя один десятичный десятичный
5. Резюме
Вышеуказанное - все введение больших и восемь режимов округления Java. Я надеюсь, что содержание этой статьи будет полезно для всех в изучении Java.