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