0
|
HasanG Joe Dabones · 技术社区 · 14 年前 |
1
1
我确信这是因为float数据类型(在MS-Access中也称为Double或Single)是不精确的。它和十进制不同,十进制是一个简单的10次方数值。如果我没记错的话,浮点值可以有不同的分母,这意味着它们并不总是精确地转换回10进制。 解决方法是将Field1和Field2从float/single/double更改为decimal或currency。如果您给出需要存储的最小值和最大值的示例,包括所需的最小值和最大值,如0.0001或0.9999,我们可能会给您更好的建议。 请注意,2007年以前的Access版本在按十进制值排序时可能会出现问题。请阅读这篇文章的评论,了解更多的观点。在许多情况下,这对人们来说不是问题,但在其他情况下可能是。 一般来说,float应该用于那些最终可能非常小或非常大(小于或大于小数点所能容纳的值)的值。您需要了解float以牺牲一些精度为代价来保持更精确的比例。也就是说,小数将溢出或下溢,而浮点可以继续。但是浮点数只有有限的有效位数,而小数位数都是有效的。 如果无法更改列类型,则可以通过舍入最终计算来解决此问题。直到最后一刻才轮到你。 更新 对我使用十进制的建议的批评已经被消除了,不是关于结果的意外顺序,而是在相同位数的情况下,浮点值总体上更精确。 对这个事实没有异议。然而,我认为人们更常见的情况是,他们的价值观实际上是以10为基数计算的,或者预期是以10为基数来表达的。我在论坛上一次又一次地看到关于他们的浮点数据类型有什么问题的问题,我没有看到关于十进制的这些问题。这对我来说意味着人们应该从十进制开始,当他们准备好如何以及何时使用float时,他们可以学习它,并在他们有能力的时候开始使用它。 同时,虽然人们总是推荐十进制可能有点沮丧 ,不要让自己脱离现实世界,在现实世界中,有更熟悉的舍入错误而牺牲非常轻微的精度降低是有价值的。
因此,如果我们有两种方法来做实际上是在说同一件事,它们都可以非常精确地表示数字到一个可笑的有效数字数字,并且都需要舍入,但是其中一个已经舍入了
明显更熟悉
四舍五入错误比另一个,我不能接受推荐更熟悉的一个在任何方面都是坏的。对于一个能够执行
也就是说,归根结底,我不得不说,抨击我推荐十进制在外太空似乎有点不合适。 最后,我想指出的是,以下说法并非完全正确,因为它过于笼统:
e 因此,它的基数经济性比基2表示法更为理想(似乎这对99.999%的计算机用户来说真的很重要)。另外,说“float和double类型”可能有点误导,因为double是float,但float不是double。Float是浮点的缩写,但是 和 是浮点数 亚型 |
2
2
这个
有时也不行。
在后一种情况下,数字将四舍五入到
被代表为
当以二进制进行减法运算时,得到:
输出例程通常会隐藏大多数“噪声”数字。
这个
|
3
1
解决方法是在值上使用舍入函数来切断多余的数字。像这样(我只是四舍五入到小数点后的4位有效数字,但您当然应该使用适合您的数据的任何精度):
|
June-Solstice · 元组到numpy,数据准确性 2 年前 |
Sorawee Porncharoenwase · 浮点溢出为负 7 年前 |
v78 · 不损失精度的第n项的有效逼近 9 年前 |
FranXh · JavaScript:toFixed(…)方法的缺点 10 年前 |
nickg · If语句不起作用(Python) 11 年前 |
Metrics · Stata中的数据精度 11 年前 |