Ms access 为什么在VBA访问中134.605*100不等于13460.5?

Ms access 为什么在VBA访问中134.605*100不等于13460.5?,ms-access,vba,Ms Access,Vba,我想这和精度有关,但我不明白。我有一段代码,应该执行舍入到2位(值是输入): 问题是,对于134.605的值,它不能正常工作。调试时,我发现某个值计算不正确。 事实上,我已经检查过: ?13460.5 = (134.605*100) False ?(134.605*100) - 13460.5 -1,02318153949454E-12 我被卡住了。我可以用不同的方式重写舍入函数,但是如果没有*100乘法,我就没有这个想法。或者我可以找出如何使*100操作对所有值都正确工作。有人能解释一下为什

我想这和精度有关,但我不明白。我有一段代码,应该执行舍入到2位(值是输入):

问题是,对于134.605的值,它不能正常工作。调试时,我发现某个值计算不正确。 事实上,我已经检查过:

?13460.5 = (134.605*100)
False
?(134.605*100) - 13460.5
-1,02318153949454E-12

我被卡住了。我可以用不同的方式重写舍入函数,但是如果没有*100乘法,我就没有这个想法。或者我可以找出如何使*100操作对所有值都正确工作。有人能解释一下为什么会发生这种情况并提出解决方案吗?

试试
Decimal
数据类型。虽然不能显式声明此类型的变量,但可以通过将其声明为
Variant
并使用
CDec
进行转换,将其隐式转换为此类变量

Debug.Print 13460.5 = CDec(134.605 * 100) 'Output - True

这实际上可能有助于@Remou您提供的链接使用我正在使用的相同算法,只是方式不同,并且它具有相同的错误并产生相同的错误结果。您可能已经注意到货币数据类型和十进制数据类型不会给出错误结果。哦,是的,我没有注意到这一点。我只是很惊讶,微软在其中一篇文章中提供的功能在这个案例中也产生了错误的结果。你可能希望好好阅读它似乎是有效的,我只需要再检查一些案例就可以100%确定了。但你能解释一下原因吗?只要找到解释浮点和十进制数据类型之间差异的合适文章就可以了。不必特别与VBA相关。我们讨论过飞行汽车、可重复使用的火箭和将人送上火星,这就是我们在VBA中的划分方式?@RyanMortensen VBA是在所有这些事情之前创建的:)
Debug.Print 13460.5 = CDec(134.605 * 100) 'Output - True