Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 - Лексические структуры языка. Типы данных. И...docx
Скачиваний:
9
Добавлен:
19.11.2019
Размер:
93.32 Кб
Скачать

6.10 Построение чисел BigDecimal

Существует несколько конструкторов для BigDecimal. Один в качестве входной информации использует плавающую точку удвоенной точности, второй - целое число и коэффициент масштабирования, а третий - String - представление десятичного числа. Вам нужно быть осторожными с конструктором BigDecimal(double), поскольку он может позволить ошибкам округления появиться в Ваших вычислениях раньше, чем вы об этом узнаете. Вместо этого используйте целое число или конструкторы, основанные на String.

Ненадлежащее использование конструктора BigDecimal(double) может проявляться в кажущихся странными ошибках в JDBC-драйверах при передаче в JDBC setBigDecimal() метод. Например, рассмотрим следующий JDBC-код, который хочет сохранить число 0.01 в десятичном поле:

PreparedStatement ps =

connection.prepareStatement("INSERT INTO Foo SET name=?, value=?");

ps.setString(1, "penny");

ps.setBigDecimal(2, new BigDecimal(0.01));

ps.executeUpdate();

В зависимости от Вашего драйвера JDBC, этот кажущийся безобидным код может при выполнении выдать некоторые запутанные ошибки, потому что приближенная величина с удвоенной точностью 0.01 приведет к большому дифференцированному значению, которое может запутать JDBC-драйвер и базу данных. Ошибка появится в JDBC драйвере, но весьма маловероятно, что она проявит себя, и Вы не будете знать, что не так с Вашим кодом, до тех пор, пока Вы не поймете ограничения двоичных чисел с плавающей точкой. Чтобы избежать возникновения таких проблем, сконструируйте BigDecimal, используя BigDecimal("0.01") или BigDecimal(1, 2) , так как каждый из них, в конечном счете, приведет к точному десятичному представлению.

Список использованных источников

  1. Шилдт Герберт. Полный справочник по Java, 7-е издание.: Пер. с англ. – М.: ООО “И.Д. Вильямс”, 2007. – 1040с.: ил. – Парал. тит. англ.

  2. Программирование на Java. Методическое руководство для преподавателей. Центр Sun технологий МФТИ,ЦОС и ВТ МФТИ. 2003.

  3. Теория и практика Java: Где ваша точка? Уловки и ловушки, связанные с плавающей точкой и десятичными числами. Брайан Гетц, главный консультант, Quiotix. 2007.

  4. Операции над примитивными данными http://mirdryzey.ru/index.php/articles/javamenu/143------java.html.