Я вижу противоречивые ссылки в документации Oracle . Есть ли разница между тем, как десятичные числа хранятся в типах FLOAT и NUMBER в базе данных?
Как я помню из C, et al, у float есть ограничения точности, которых нет у int. Например, для чисел с плавающей запятой 0,1 (основание 10) приблизительно равно 0.110011001100110011001101 (основание 2), что приблизительно равно 0,100000001490116119384765625 (основание 10). Однако для 'int's 5 (Base 10) - это точно 101 (Base 2).
Вот почему следующее не завершится, как ожидалось в C:
float i;
i = 0;
for (i=0; i != 10; )
{
i += 0.1
}
Однако я вижу в других местах документации Oracle , что FLOAT был определен как NUMBER. И, насколько я понимаю, реализация Oracle типа NUMBER не сталкивается с той же проблемой, что и с плавающей точкой C.
Итак, что за настоящая история здесь? Отклонился ли Oracle от нормы того, что, как я ожидаю, произойдет с float / FLOATs?
(Я уверен, что это различие в том, что я буду использовать их, но я знаю, что у меня будут вопросы, если 0.1 * 10 выйдет из 1.00000000000000001)