【问题标题】:Microsoft Access Automatically Increase DecimalMicrosoft Access 自动增加小数点
【发布时间】:2019-07-15 20:43:42
【问题描述】:

嗨,我的伙伴访问用户。 我正在使用 Access 通过链接两个 Excel 表进行对帐。数字是两位小数。 Linked Table view

但是,当我尝试在两个小数点后两个数字之间进行减法运算时,它会返回如下结果:

如果有人知道这是怎么发生的,以及我需要采取哪些步骤来解决它,不胜感激?

谢谢 田

【问题讨论】:

  • 当您说“十进制”数字时,列的精确数据类型是什么?对于链接的 Excel 工作表,类型可能是 Double,即 64 位浮点数。您遇到的这个问题可能是由于浮点数的固有限制,并不是 Excel 或 Access 独有的。
  • 也作为编写更好的 SO 问题的提示:如果您显示某些计算的结果,则始终显示您用于获得该计算的数字,而不仅仅是结果。此外,不要使用图像,而是花时间编译一个实际样本值表,这些值在问题中可见并且可以复制和粘贴。

标签: ms-access


【解决方案1】:

不要直接使用链接的 Excel 数据。

创建简单的选择查询,您可以在其中转换和修剪数据。喜欢:

Select SomeField, Description, CCur([TotalAmount]) As Total
From YourLinkedExcelTable

处理金额时,始终使用 货币 作为数据类型。

现在,使用查询计算您的 Diff

【讨论】:

  • +1 我假设“金额”是指“货币金额”,因为货币缺乏足够的小数精度(只有 4 位数字)来表示任何一般金额。
  • 是的。谢谢。
【解决方案2】:

对于链接的 Excel 工作表,列类型可能是 Double,即 64 位 浮点数。您遇到的这个问题可能是由于浮点数的固有限制,并不是 Excel 或 Access 独有的。

这个 Stack Overflow 问题基本上问的是同样的问题:Why does this subtraction not equal zero?

Excel 也不例外,只是默认格式可能无法显示显示行为所需的精度。选择科学格式或增加显示的小数位数将显示相同的行为。

考虑以下几点:

  1. 对于货币金额,使用CCur() 函数将值转换为货币。货币是一个固定的十进制值,但请注意它的小数点右侧只有 4 位。 (更新以反映古斯塔夫的建议)
  2. 在执行数学运算之前,使用CDec() 函数将值转换为定点小数类型。没有原生 VBA Decimal 类型,因此这些是包含 Decimal 值的变体。但在转换回浮点数后,仍然可能会遇到额外的数字。
  3. 使用 Round() 函数对结果进行舍入,但同样不能保证消除浮点限制。
  4. 选择显示数字的明确格式。

【讨论】:

  • 好提示。我已将源 excel 列类型更新为货币,问题现已消失。
  • 感谢您花时间对问题本身发表评论,并指出。非常感谢您的时间。
猜你喜欢
  • 2014-07-16
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2023-04-10
  • 1970-01-01
  • 2019-04-28
相关资源
最近更新 更多