Sql server sql server中值为2位小数的列的总和如何计算0000000000087?

Sql server sql server中值为2位小数的列的总和如何计算0000000000087?,sql-server,floating-point,Sql Server,Floating Point,我有一个包含浮点列的表 那张表里有许多记录 当我进行分组时,它显示float列只有以下值: 0.1 0.2 0.25 0.5 1. 2. 三, 但当我做一个求和时,结果是: 58.35000000000087 0000000000087从哪里来?是因为我使用的是浮点型而不是十进制/数字型吗?我在论坛上读了一些关于这方面的帖子,但数学让我头疼。获得准确结果的正确方法是什么?IEEE 754(及相关)浮点数不能准确表示许多十进制值。当您执行算术运算(例如求和)时,有时会得到无法很好表示的值,并且会发

我有一个包含浮点列的表

那张表里有许多记录

当我进行分组时,它显示float列只有以下值: 0.1 0.2 0.25 0.5 1. 2. 三,

但当我做一个求和时,结果是: 58.35000000000087

0000000000087从哪里来?是因为我使用的是浮点型而不是十进制/数字型吗?我在论坛上读了一些关于这方面的帖子,但数学让我头疼。获得准确结果的正确方法是什么?

IEEE 754(及相关)浮点数不能准确表示许多十进制值。当您执行算术运算(例如求和)时,有时会得到无法很好表示的值,并且会发生错误

有关更多信息,请参阅本文:

根据您使用的SQL server,有精确的十进制数值类型,也有不精确的数值类型。例如,正如您所发现的,
float
对于小数并不精确。但是,
money
decimal
是。

IEEE 754(及相关)浮点数不能准确表示许多十进制值。当您执行算术运算(例如求和)时,有时会得到无法很好表示的值,并且会发生错误

有关更多信息,请参阅本文:


根据您使用的SQL server,有精确的十进制数值类型,也有不精确的数值类型。例如,正如您所发现的,
float
对于小数并不精确。但是,
money
decimal
是。

0.1和0.2不能精确地表示为二进制浮点数,因此您会得到一个小的“盈余”。0.1和0.2不能精确地表示为二进制浮点数,因此您会得到一个小的“盈余”。

+1-准确地说。每个人都应该像吃药一样每年读一次那篇文章。“浮动不精确。然而,金钱和小数是精确的。”当我读到这些垃圾时,我会畏缩。浮点数精确表示二次幂的分数,最多可表示给定的位数。例如,1.25可以用float精确表示。“decimal”可以很好地用于小数,但这两个词都不能精确地表示1/3或1/7。谢谢你的评论-我更新了答案,说“decimals精确”。+1-准确。每个人都应该像吃药一样每年读一次那篇文章。“浮动不精确。然而,金钱和小数是精确的。”当我读到这些垃圾时,我会畏缩。浮点数精确表示二次幂的分数,最多可表示给定的位数。例如,1.25可以用float精确表示。“decimal”可以很好地用于小数,但这两个词都不能精确地表示1/3或1/7。谢谢你的评论-我更新了答案,说“decimal”精确。你想表示什么样的数据?有时,不同的数据类型比浮点数更好地表示某些类型的数据。在这种情况下,我使用它们几个小时。它们并不需要精确,我只是想知道为什么那些看似简单的数字会导致一个看似错误的总和。现在我知道了:)你想表达什么样的数据?有时,不同的数据类型比浮点数更好地表示某些类型的数据。在这种情况下,我使用它们几个小时。它们并不需要精确,我只是想知道为什么那些看似简单的数字会导致一个看似错误的总和。现在我知道了:)简单的解释很好。谢谢很好的简单解释。谢谢