update/insert 数据类型为 SINGLE 的字段的问题

Issues on update/insert a field that the data type is SINGLE

我简直不敢相信正在发生的事情,证明这个问题是如此简单。 您只需要使用 DAO 将下面的代码执行到 ACCESS DB 中。

CREATE TABLE Table1(Field1 Single)

INSERT INTO Table1 (Field1) VALUES(9.99)

然后

SELECT * FROM [Table1]

结果是

字段 1 = 9,98999977111816

这很重要,因为如果您插入 2000 行之类的内容然后对该字段求和,该值将开始与预期的值总和相去甚远。

正在添加更多信息,

Currency 有FieldSize = 15 来存储,Single 有FieldSize = 7 来存储,我需要使用Single 因为存储限制对我来说很重要。

解决方案很好。 推测是浪费时间。 真的不值得投反对票。

关于这个问题,有没有人遇到同样的问题? 这是一个记录在案的问题吗? 让我们谈谈这种行为,谁和我一起?

您看到的是浮点错误 - 或者更确切地说是限制。

如果您希望对数据执行计算并且不需要超过四位小数,则应始终使用货币数据类型。

Currency uses 15 bytes to store

不,不是。它使用8个字节存储,精确到小数点左边15位(ref: here).

Single uses 7 bytes

不,它使用 4 个字节。但是,它是一种浮点表示形式,因此具有 any 浮点数据类型的局限性,如下所述:

Is floating point math broken?

如果使用 Currency 所需的额外存储 space 对您来说是一个真正的问题,那么您应该重新审视应用程序的整体设计。例如,如果您担心 Access table(数据库文件)的 2GB 限制,那么 Access 数据库引擎可能不再是完成这项工作的正确工具。

附录:

感谢@HansUp 提醒我们在 Access 2000 之前限制是 1GB,OP 确实使用 Access 97。大约 20 年后,也许是时候升级到更新版本的 Access。