SQL Server float数据类型

Mar*_*ith 3 sql-server floating-point

SQL Server Float的文档说

用于浮点数字数据的近似数字数据类型.浮点数据是近似值; 因此,并非数据类型范围中的所有值都可以准确表示.

这就是我所期望的.如果是这种情况,为什么以下在SQL Server中返回"是"(意外)

DECLARE @D float
DECLARE @E float

set @D = 0.1
set @E = 0.5

IF ((@D + @D + @D + @D +@D) = @E)
 BEGIN
 PRINT 'YES'
 END 
ELSE
 BEGIN
 PRINT 'NO'
 END 
Run Code Online (Sandbox Code Playgroud)

但是等效的C++程序返回"No"(预期为0.1不能精确表示,但0.5可以)

#include <iostream>

using namespace std;

int main()
{
float d = 0.1F;
float e = 0.5F;

if((d+d+d+d+d) == e)
 {
 cout << "Yes";
 }
else
 {
 cout << "No";
 }
}
Run Code Online (Sandbox Code Playgroud)

Mal*_*sen 8

这可能是由不同的舍入策略,应用操作数的顺序,中间结果的存储方式等等引起的.有关详细信息,请参阅每个计算机科学家应该了解的关于浮点运算的内容.如果您不完全确定自己知道自己在做什么,则应避免在浮点数计算中进行相等比较.