为什么模运行良好带小数但不与浮子/真实它 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