Я вижу противоречивые ссылки в Документация оракулов. Есть ли разница между тем, как десятичные числа хранятся в FLOAT и NUMBER типах в базе данных?
Как я помню из C, et al, у float есть ограничения точности, которых нет у int. R.g., For 'float's, 0.1 (Base 10) приближается к 0,110011001100110011001101 (основа 2), что составляет примерно 0,100000001490116119384765625 (основание 10). Однако для "int" 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 float.
Итак, что это за настоящая история? Разве Oracle отклонился от нормы того, что я ожидаю от float/FLOAT?
(Я уверен, что это пчела-пердеть в урагане разницы в том, за что я их буду использовать, но я знаю, что у меня будут вопросы, если 0,1 * 10 выйдет до 1.00000000000000001)