В моем приложении я обрабатываю числа как BigDecimal и сохраняю их как NUMBER (15,5). Теперь мне нужно правильно проверить на Java, соответствуют ли значения BigDecimal столбцу, чтобы я мог генерировать правильные сообщения об ошибках без выполнения SQL, перехвата исключений и проверки кода ошибки поставщика. Моя база данных - Oracle 10.3, и такие ошибки вызывают ошибку 1438 .
После некоторого поиска, я не нашел такого кода для этого, поэтому я придумал свой собственный. Но я действительно недоволен этим кодом ... простым, но в то же время достаточно простым, чтобы сомневаться в его правильности. Я проверил это со многими значениями, случайными и границами, и это, кажется, работает. Но так как я действительно плохо разбираюсь в числах, мне нужен более надежный и хорошо проверенный код.
//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). Исключение исключено, этот метод тестирования должен гарантировать, что число не слишком велико для достижения требуемой точности, даже если оно не имеет значения. Извините за позднее уточнение.
Спасибо за ваше время.
Мне все еще интересно этот вопрос. Мой код все еще выполняется, и у меня нет каких-либо «доказательств» правильности или неудачной ситуации, или какого-либо стандартного кода для такого рода испытаний.
Итак, я вознаграждаю их, надеюсь, получу что-нибудь из этого.