为了在MS Access中存储货币值,我有3个选项:
我应该使用最后一个吗?还是十进制?
答案 0 :(得分:0)
您不想使用double,因为使用此类浮动数字时Excel或Access会导致各种舍入错误。
此代码很好地演示了这个问题:
Public Sub TestAdd()
Dim MyNumber As Single
Dim I As Integer
For I = 1 To 10
MyNumber = MyNumber + 1.01
Debug.Print MyNumber
Next I
End Sub
以上是上述的输出:
1.01
2.02
3.03
4.04
5.05
6.06
7.070001
8.080001
9.090001
10.1
你可以看到,经过7次加法后,已经进行了四舍五入。
计算科学的第一课是计算机不能准确存储浮点数(它们只是近似值)。因此,在处理涉及金钱的金融应用程序时,真的需要避免使用实数。请注意,上面的代码甚至在Excel中运行SAME。
这里的教训是,当您使用涉及金钱的应用程序时,您需要使用整数值来避免舍入。货币是一种数据类型(它是一个整数值,可以包含小数位数)。
我在这里有一篇文章解释了如何处理不会导致Access中出现舍入错误的数字: http://www.kallal.ca/Articles/rounding/Rounding.html
简短的故事和规则只是使用货币数据类型,因为浮动数字会给你带来很多问题。