(0) Пожалуйста, подтвердите или опровергните: вам даны числа с плавающей запятой для использования, это неизбежно, вы не можете получить данные как десятичные, типы данных Oracle включают типы на основе десятичных чисел, и это фундаментальное несоответствие неизбежно. Пожалуйста, объясните любой полный или частичный отказ.
(1) Ваше замечание «сбой для больших чисел» вводит в заблуждение / не имеет значения / неверно - вы говорите, что отправной точкой является число с плавающей точкой, но 1234567890.0987654321 не может быть представлено как число с плавающей точкой, как показывает результат repr ().
(2) Возможно, вы могли бы использовать NEW repr (Python 2.7 и 3.1), который обеспечивает минимально возможную точность repr (x), которая все еще удовлетворяет float(repr(x)) == x
например. старый repr (1.1) выдает «1.1000000000000001», новый repr (1.1) выдает «1.1»
О «Я думаю, карта (len, repr (num) .split ('.')) - самая близкая к точности и масштабу плавания?": Вам нужна стратегия для обработки (a) отрицательные и нулевые числа (б), такие как 1.1e20
Копание в Objects / floatobject.c должно включить код C для нового repr () объекта float, если вам нужно использовать Python 2.6 или более раннюю версию.
(3) Возможно, если вы сообщите нам спецификации для соответствующих типов данных Oracle, мы могли бы помочь вам разработать проверки для выбора типа, который может содержать данное значение с плавающей запятой.