爲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