【发布时间】:2023-03-11 16:28:01
【问题描述】:
我对在查询中使用时无法按预期工作的舍入函数感到很困惑。 更新,我想我找到了问题,如下所列,但不知道为什么它应该这样工作
基本上,我有一个类型为 Single 的值 [Amount],通常具有 5 位可用精度,但在某些查询中,我想将其四舍五入为两位数,其他时候将其保持为 5。我发现了什么是即使 [Amount] 只有两位小数的实际数据,查询也会返回 12 或 13,几乎就像它的反向工作一样,它将它“展开”到一个略低的数字......见下文。我什至尝试使用整数舍入函数,首先将值乘以 100000,然后取整数,然后除以 100000,我看到类似的行为:几乎就像 Access 以不同的精度存储数据而不是实际呈现它
以前从未见过这种情况,不知道如何纠正它并使其符合预期。顺便说一句,如果我使用相同的查询并从中创建一个表,这 12 个数字值将被放入新表中。
感谢任何想法,因为我试图在某些地方将我的数学修正为 5 位数字,而这种不准确性使得无法知道真正的价值应该是什么。我在最初的 2 位数字上方放置了一些示例值,这样您就可以看到这种行为是多么令人困惑。
SQL:
SELECT amount, Round([amount],2) AS Round_2_Digits, Round([amount],5) AS Round_5_digits, Int([amount]*100000)/100000 AS Integer_5 digits from FCS
amount Round_2_Digits Round_5_digits Integer_5 digits
95.88 95.879997253418 95.879997253418 95.87999
95.88001 95.879997253418 95.880012512207 95.88001
95.881 95.879997253418 95.8809967041016 95.88099
95.889 95.8899993896484 95.8889999389648 95.88899
更新:在写这篇文章的时候,我想知道是不是Single数据类型的问题,当我把它改成Double时,首先源数据[Amojnt]肯定改变了,如下图,然后当我修复源时[金额]到原来的,四舍五入功能完美。事实上,它甚至可以处理奇怪的数据,因为它的数量太少了。
那么 Single 数据类型是罪魁祸首吗?我使用它是因为我试图最小化数据存储,但显然 Double 是要走的路。有谁知道为什么?谢谢!
这是我将数据类型更改为双精度后的更新查询:
amount Round_2_Digits Round_5_digits Integer_5 digits
95.879997253418 95.88 95.88 95.87999
95.880012512207 95.88 95.88001 95.88001
95.8809967041016 95.88 95.881 95.88099
95.8889999389648 95.89 95.889 95.88899
这是我将原始数据重置为应有的状态后的查询
amount Round_2_Digits Round_5_digits Integer_5 digits
95.88 95.88 95.88 95.88
95.88001 95.88 95.88001 95.88001
95.881 95.88 95.881 95.881
95.889 95.89 95.889 95.889
【问题讨论】:
标签: sql ms-access-2013 rounding-error