Как вычислить модуль с плавающей точкой в ​​TSQL? - PullRequest
1 голос
/ 23 июня 2010

Функция модуля в Microsoft SQL Server работает только для определенных типов данных.

Согласно статье MSDN [1] об операторе модуля, вы обычно используете модуль, подобный этому ...

dividend % divisor

dividend
Is the numeric expression to divide. dividend must be a valid 
expression of any one of the data types in the integer and 
monetary data type categories, or the numeric data type.

divisor
Is the numeric expression by which to divide the dividend. 
divisor must be any valid expression of any one of the data 
types in the integer and monetary data type categories, or 
the numeric data type.

Однако это не работает, когда дивиденд является типом данных с плавающей запятой. Ответ, который мы придумали, приведен ниже для дальнейшего использования.

[1] http://msdn.microsoft.com/en-us/library/ms190279.aspx

Ответы [ 3 ]

5 голосов
/ 24 июня 2010

Приведение к десятичному / числовому, по модулю и приведению обратно?

CAST(CAST(TheInaccurateFloatValue AS decimal(38,19)) % ModuloValue AS float) 
2 голосов
/ 10 сентября 2016
declare @A float = 2.5
declare @B float = 1.1

-- Expected: A % B = 2.5 % 1.1 = 0.3

select @A - floor(@A / @B) * @B
1 голос
/ 23 июня 2010

Это ответ, который я придумал.Он применяется только в том случае, если дивидендом является число с плавающей запятой, а не делитель.

( cast(dividend as integer) % divisor ) + ( dividend - cast(dividend as integer))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...