爲什麼模運行良好帶小數但不與浮子/真實它 MSDN狀態「必須在整數和貨幣數據類型類別,或數字數據類型數據類型中的任何一個的有效表達。」爲什麼不浮動值,因爲它是一個近似值?Modulo(%)與Decimal數據類型一起使用,但不與float或real一起使用。爲什麼?
--Runs fine
declare @pri decimal
set @pri = 3.25
select @pri%2
結果1
--Gives an error 402
declare @pri float
set @pri = 3.25
select @pri%2
消息402,級別16,狀態1,第3行 類型float的數據和數字是模運算符不兼容。
您使用的是哪個版本的SQL Server?第一個在SQL Server 2000中也給我一個錯誤。 – 2012-03-06 09:23:41
雖然我不能肯定地說,但我認爲你是正確的,你從二進制IEEE754類型(float和double precision)中得到的舍入誤差使得語言設計者禁止對它們進行模數。使用數字和小數可以指定精度和比例。這只是一個猜測,但是,例如,JavaScript和C很樂意讓你使用浮點數和雙精度浮點數(當然是C語言中的「fmod」)。 – 2012-03-06 09:27:35
@Ocaso Protal:這是因爲第一個嘗試用浮點數初始化一個固定點變量。 – vsz 2012-03-06 09:27:55