Ms access MS Access和计算中返回的小数位数

Ms access MS Access和计算中返回的小数位数,ms-access,ms-access-2010,Ms Access,Ms Access 2010,这不是一个格式问题 我最近发现,在MS Access(2010)查询中进行简单除法不会返回预期的位数。即使是最简单的: (3.1+3.1)/2=3.1 但MS Access返回3.0999909463257 是的,我可以对结果进行四舍五入和/或格式化,以显示指定的小数位数。同样,在上面的例子中,四舍五入将给出3.1的真实值;然而,我的问题只是“MS Access为什么会这样做?”而不是如何修复它。两者都有 SELECT (3.1+3.1)/2 AS Result FROM tblFoo 在查询

这不是一个格式问题

我最近发现,在MS Access(2010)查询中进行简单除法不会返回预期的位数。即使是最简单的: (3.1+3.1)/2=3.1

但MS Access返回3.0999909463257

是的,我可以对结果进行四舍五入和/或格式化,以显示指定的小数位数。同样,在上面的例子中,四舍五入将给出3.1的真实值;然而,我的问题只是“MS Access为什么会这样做?”而不是如何修复它。

两者都有

SELECT (3.1+3.1)/2 AS Result FROM tblFoo
在查询中,以及

Debug.Print (3.1 + 3.1)/2
在VBA中为我返回
3.1


您是否对数据类型单个的值进行求和?它们的精度有限。

该链接的可能副本将帮助您了解二进制十进制数学中涉及的问题。但你问题中的另一件事让我感到惊讶。下面的Access 2010查询显示Expr1为3.1,Expr2为-1(True)<代码>选择(3.1+3.1)/2作为Expr1,(3.1+3.1)/2=3.1作为Expr2,这与您报告的内容不一致。VBA通常会进行一些隐式四舍五入或“足够接近”的比较,以尝试提供帮助。例如,
?(0.2*5.0)=1.0
返回
True
,但是
?((0.2*5.0)-1.0)=0.0
返回
False
,因为
((0.2*5.0)-1.0)
返回
5.55111512312578E-17
。谢谢。事实上,带有实际数字的公式确实返回3.1;所以我道歉。但是,如果使用一个字段并将其自身相加,然后除以2,则不会返回确切的数字,除非它是一个整数。我发现无论字段的数据类型是Double还是Single,这都是正确的。