Ms access 在Access数据库中存储舍入的货币值时是十进制还是双精度?

Ms access 在Access数据库中存储舍入的货币值时是十进制还是双精度?,ms-access,double,decimal,Ms Access,Double,Decimal,我目前正在将包含货币值的数据集导入Access数据库。虽然我已经读到我应该使用十进制数据类型作为货币,但是如果将值四舍五入到最接近的美元,我是否可以使用double来减少文件大小 据我所知,使用double表示货币的问题是由于四舍五入,但我不会直接对数据进行计算。任何计算都将由应用程序/用户完成 类似地,由于数据是固定长度的,一些十进制值用整数表示。例如,某些字段可能包含值12345,但实际值为12.345。这要求我导入数据,然后更新值;在上面的例子中除以1000 以这种方式使用double是否

我目前正在将包含货币值的数据集导入Access数据库。虽然我已经读到我应该使用十进制数据类型作为货币,但是如果将值四舍五入到最接近的美元,我是否可以使用double来减少文件大小

据我所知,使用double表示货币的问题是由于四舍五入,但我不会直接对数据进行计算。任何计算都将由应用程序/用户完成

类似地,由于数据是固定长度的,一些十进制值用整数表示。例如,某些字段可能包含值12345,但实际值为12.345。这要求我导入数据,然后更新值;在上面的例子中除以1000


以这种方式使用double是否也会导致舍入错误?

是的,除法可以并且将引入舍入错误

您希望将货币用于任何类型的业务软件。事实上,如果没有货币数据类型,则使用缩放整数缩放结果。你这样储存

123.52美元

作为

1235200

假设小数点后4位

当然,原因是计算机中的实数只是一种表示形式,只是一种近似值——它们需要四舍五入

这是一个简单的代码:

  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

  Here is the actual output of the above:

   1.01
   2.02
   3.03
   4.04
   5.05
   6.06
   7.070001
   8.080001
   9.090001
   10.1
想象一下上面的情况——在仅仅7个简单而愚蠢的添加之后,我们已经得到了错误的答案。即使在Excel中,VBA也会这样做。如前所述,我们使用的是0.01,但它只是近似值!因此,虽然我们假设这个值是1/100,但它仅在计算机中使用实际格式时是近似值

因此,计算机不能也不能精确地存储实数。结果会出现舍入误差

对于工资单或任何与商业应用程序和金钱有关的东西,您必须使用缩放整数,否则您的表格、会计甚至报表将无法相加,并且您会遇到舍入错误


我想不出在存储空间方面有什么好处,除非您存储数百万行数据。更糟糕的是,如果您将这些数据导出到其他系统,那么导出实数可能会引入各种伪影,甚至在导出时引入指数-使用货币-您可以安全地看到和拥有这些数据。

是的,除法可能也将引入舍入错误

您希望将货币用于任何类型的业务软件。事实上,如果没有货币数据类型,则使用缩放整数缩放结果。你这样储存

123.52美元

作为

1235200

假设小数点后4位

当然,原因是计算机中的实数只是一种表示形式,只是一种近似值——它们需要四舍五入

这是一个简单的代码:

  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

  Here is the actual output of the above:

   1.01
   2.02
   3.03
   4.04
   5.05
   6.06
   7.070001
   8.080001
   9.090001
   10.1
想象一下上面的情况——在仅仅7个简单而愚蠢的添加之后,我们已经得到了错误的答案。即使在Excel中,VBA也会这样做。如前所述,我们使用的是0.01,但它只是近似值!因此,虽然我们假设这个值是1/100,但它仅在计算机中使用实际格式时是近似值

因此,计算机不能也不能精确地存储实数。结果会出现舍入误差

对于工资单或任何与商业应用程序和金钱有关的东西,您必须使用缩放整数,否则您的表格、会计甚至报表将无法相加,并且您会遇到舍入错误


我想不出在存储空间方面有什么好处,除非您存储数百万行数据。更糟糕的是,如果你将这些数据导出到其他系统,那么导出实数会在导出时引入各种伪影,甚至是指数-使用货币-你看到的和拥有的都是安全的。

如果它们是整数,你不能将列设为整数吗?这是我最初的方法,但是我的表中的一些值太大了。不幸的是,即使Access中的长整数数据类型也只能容纳从-2147483648到+2147483647的值。如果它们是整数,您不能将列设置为整数吗?这是我最初的方法,但我的表中的一些值太大。不幸的是,即使Access中的长整数数据类型也只能容纳从-2147483648到+2147483647的值。因此,我应该使用缩放整数,还是应该使用十进制数据类型?不幸的是,我的表中的一些值甚至超过了可以存储在长整数中的值。我是希望依赖Double来保存超大规模的整数,还是只用于浮点运算?我的理解是,十进制的目的是存储定点数字以防止此类错误。如果数字合适,我将使用货币数据类型。如果货币不能处理您的数字,那么我是的,使用十进制将是我的下一个选择。不清楚有多少个有效数字,但双精度通常可以,因为有足够的有效数字
铁路超高数字15表示任何小舍入都不会显示。然而,似乎我们从大约4个小数点到现在,你所说的东西将不适合一个长整数,这是一个相当大的变化。所以是的,你最好的选择是十进制,它是一个缩放整数,尽管名称是decimalt谢谢,你学识渊博!因此,整数有一个值限制,而浮点有一个数字限制;双人15英镑。对的小数点后的最大位数为4,但大多数字段只有2。Long Int不起作用,因为我的值超过了-2147483648到2147483647。sig图的最大数量似乎是10,都在小数点的左侧,即整数。由于值大于Long Int允许的值,我是否被迫使用double?此外,Access似乎没有货币类型;只有十进制的货币格式。那么,我应该使用缩放整数,还是应该使用十进制数据类型?不幸的是,我的表中的一些值甚至超过了可以存储在长整数中的值。我是希望依赖Double来保存超大规模的整数,还是只用于浮点运算?我的理解是,十进制的目的是存储定点数字以防止此类错误。如果数字合适,我将使用货币数据类型。如果货币不能处理您的数字,那么我是的,使用十进制将是我的下一个选择。不清楚有多少个有效数字,但双精度通常可以正常工作,因为有足够的有效数字15,任何小的舍入都不会显示出来。然而,似乎我们从大约4个小数点到现在,你所说的东西将不适合一个长整数,这是一个相当大的变化。所以是的,你最好的选择是十进制,它是一个缩放整数,尽管名称是decimalt谢谢,你学识渊博!因此,整数有一个值限制,而浮点有一个数字限制;双人15英镑。对的小数点后的最大位数为4,但大多数字段只有2。Long Int不起作用,因为我的值超过了-2147483648到2147483647。sig图的最大数量似乎是10,都在小数点的左侧,即整数。由于值大于Long Int允许的值,我是否被迫使用double?此外,Access似乎没有货币类型;只有十进制的货币格式。