Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL MOD() è rotto:è questa la migliore alternativa?

MySQL non ti sta dando un risultato fasullo, sta semplicemente usando un'implementazione di modulo diversa da quella che ti aspetti. Sfortunatamente il termine modulo sembra essere stato definito in modo alquanto ambiguo e la sua implementazione varia da lingua a lingua. Da quello che posso dire nella Wikipedia su Modulo , l'implementazione di MySQL utilizza la divisione troncata :

r = a - n * trunc(a / n)

Dove prevedi che l'implementazione utilizzi la divisione totale :

r = a - n * floor(a / n)

Dato che questo è il modo in cui hai implementato la tua prima soluzione alternativa, direi che è probabilmente la migliore alternativa al Mod operatore.

Da quello che ho visto (e questa è un'analisi non scientifica molto veloce!), sembra che linguaggi di programmazione più imperativi implementino la divisione troncata e linguaggi matematici più funzionali sembrano utilizzare la divisione a pavimento .