Perché modulo funziona bene con decimali, ma non con galleggiante/reali MSDN stati su di esso "deve essere una valida espressione di uno qualsiasi dei tipi di dati in intero e monetari categorie di tipi di dati, o il tipo di dati numerici." perché non valori fluttuanti, perché è un valore approssimativo ??Modulo (%) funziona con datatype decimale ma non con float o reale. PERCHÉ?
--Runs fine
declare @pri decimal
set @pri = 3.25
select @pri%2
Risultato 1
--Gives an error 402
declare @pri float
set @pri = 3.25
select @pri%2
messaggio 402, livello 16, Stato 1, linea 3 I dati tipi float e numerico sono incompatibili nell'operatore modulo.
Quale versione di SQL Server si utilizza? Anche il primo mi dà un errore in SQL Server 2000. –
Anche se non posso dirlo con certezza, penso che tu abbia ragione che l'errore di arrotondamento ottenuto dai tipi IEEE754 binari (float e doppia precisione) ha reso i designer del linguaggio vietati su di essi il modulo. Con valori numerici e decimali è possibile specificare una precisione e una scala. Questa è solo un'ipotesi, tuttavia, JavaScript e C, per esempio, sono più che felici di permetterti di modare su float e double (è 'fmod' in C ovviamente). –
@Ocaso Protal: questo perché il primo tenta di inizializzare una variabile a virgola fissa con una variabile a virgola mobile. – vsz