为SQL Server Float文档说SQL Server的float数据类型
近似数数据类型使用 与浮点数字数据。 浮点数据是近似值;因此,并非数据 类型范围中的所有值都可以精确地表示。
这是我期望它说的。如果是这样,虽然为什么在SQL Server中的以下返回“是”(意外)的情况下
DECLARE @D float
DECLARE @E float
set @D = 0.1
set @E = 0.5
IF ((@D + @D + @D + @D [email protected]) = @E)
BEGIN
PRINT 'YES'
END
ELSE
BEGIN
PRINT 'NO'
END
但等价的C++程序返回“否”(预计为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";
}
}
+1我认为你对舍入策略的第一点很可能是钱的问题。根据http://msdn.microsoft.com/en-us/library/ms187912.aspx“IEEE 754规范提供了四种取整模式:四舍五入到最近,四舍五入,四舍五入为零。Microsoft SQL Server使用围捕。”。 – 2010-05-30 12:52:54