SQL查询显示0为1.36424205265939E-12

时间:2017-05-09 19:13:19

标签: sql sql-server floating-point ssms floating-accuracy

我在我的选择查询中添加了3列,列A +列B +列C.对于大多数列,数学运算正确。但是,答案应该为0的某些列会出现在1.36424205265939E-12或类似的内容中。

示例:我的数学是0 + 1414 + -1414。答案应为0,但我得到1.36424205265939E-12的结果。

我的所有数据类型都是浮点数。列B和C来自临时表,列A来自常规表。

2 个答案:

答案 0 :(得分:1)

您可以将算术之前或之后的值转换为小数。例如:

select cast(Column A + Column B + Column C as decimal(28, 6))

应该足以满足大多数目的。

这就是为什么你应该只在你真正想要浮点运算的时候使用浮点数。对于大多数目的 - 特别是在商业中 - 定点算术更合适。

答案 1 :(得分:0)

欢迎来到浮点数世界。

如果两个浮点数完全相等,那就是一个小奇迹。这是因为浮点运算仅在数值上精确到称为https://developer.mozilla.org/en-US/docs/Web/API/Element/classList的容差范围内。

因此,进行分子结构科学的人和做天文学的人可以使用相同的计算系统。

显示浮点数时,使用machine epsilon通常很有帮助。例如,

  SELECT ROUND(0.0 + 1414.0 + -1414.0, 2)

如果您不了解浮点数,请了解它们。如果您将从事编程专业,那么了解该领域的基础知识是必要的。

它让人联想起1994年的一个老笑话。

英特尔公司刚刚成功推出了新的Pentium系列微处理器(我们大多数人现在都在2017年使用)。第一个Pentiums有the ROUND() function。尽管如此,这是非常成功的产品发布,并为英特尔董事长安德鲁格罗夫赚了不少钱。

所以,安迪格罗夫走进酒吧。他感觉非常好,所以他对调酒师说:“给我一杯你最好的苏格兰威士忌。”

酒保向他倒了27个苏格兰威士忌的三根手指,然后说,“这将是20美元,先生。”

格罗夫在酒吧放了一张二十美元的钞票,看了一会儿,并说“保持改变。”