BigDecimal в SQL НОМЕР: проверьте значение, превышающее точность

В моем приложении я обрабатываю числа как BigDecimal и сохраняю их как NUMBER (15,5 ). Теперь мне нужно правильно проверить на Java, подходят ли значения BigDecimal для столбца, чтобы я мог генерировать правильные сообщения об ошибках без выполнения SQL, перехвата исключений и проверки кода ошибки поставщика. Моя база данных - Oracle 10.3, и такие ошибки вызывают ошибку 1438 .

После некоторого поиска в Google я не нашел такого кода для этого, поэтому я придумал свой собственный. Но меня очень не устраивает этот код ... простой, но в то же время достаточно простой, чтобы усомниться в его правильности. Я тестировал его со многими значениями, случайными и границами, и, похоже, он работает. Но поскольку я плохо разбираюсь в числах, мне нужен более надежный и хорошо протестированный код.

//no constants for easier reading
public boolean testBigDecimal(BigDecimal value) {
    if (value.scale() > 5)
        return false;
    else if (value.precision() - value.scale() > 15 - 5)
        return false;
    else
        return true;
}

Изменить: в недавних тестах не было исключения для чисел вне шкалы, просто округление было тихо, и я не уверен, чем отличается нет и когда я сделал эти первые тесты. Такое округление недопустимо, потому что приложение является финансовым, и любое округление / усечение должно быть явным (с помощью методов BigDecimal). Исключение ушло в сторону, этот метод проверки должен гарантировать, что число не слишком велико для желаемой точности, даже если оно состоит из незначительных цифр. Извините за позднее разъяснение.

Спасибо за ваше время.


Мне все еще любопытно по поводу этого вопроса. Мой код все еще работает, и у меня нет "доказательства" правильности или неудачной ситуации, или какого-либо стандартного кода для такого рода тестов.

Итак, я назначаю вознаграждение за него, надеюсь, получу хоть какую-то из эти.

9
задан Kiquenet 8 June 2017 в 07:03
поделиться