-1

我无法相信正在发生的事情,证明这个问题是如此简单。您只需要使用 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 因为存储限制对我来说非常重要。

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

那么这个问题呢,有人有同样的问题吗?这是一个记录在案的问题吗?让我们谈谈这种行为,谁和我在一起?

4

2 回答 2

3

货币使用 15 个字节来存储

不,它没有。它使用 8 个字节来存储,精确到小数点左边的 15 位(参考:here)。

单次使用 7 个字节

不,它使用 4 个字节。但是,它是浮点表示,因此具有此处所述的任何浮点数据类型的限制:

浮点数学被破坏了吗?

如果需要使用的额外存储空间Currency对您来说是一个真正的问题,那么您应该再看看您的应用程序的整体设计。例如,如果您担心 Access 表(数据库文件)的 2GB 限制,那么 Access 数据库引擎可能不再适合这项工作。

附录:

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

于 2016-08-08T15:55:13.297 回答
3

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

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

于 2016-08-08T14:27:30.953 回答