我在Oracles 文档中看到相互冲突的引用。小数如何存储在 FLOAT 和数据库中的 NUMBER 类型之间有什么区别吗?
正如我从 C 等人中回忆的那样,浮点数具有 int 没有的精度限制。Rg,对于“浮点数”,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 是否偏离了我对浮点数/浮点数的预期?
(我敢肯定,对于我将使用它们的用途而言,这是一场巨大的飓风,但我知道如果 0.1*10 等于 1.00000000000000001,我会有疑问)