Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL MOD() está quebrado:esta é a melhor alternativa?


O MySQL não está dando um resultado falso, está simplesmente usando uma implementação diferente do módulo do que você espera. Infelizmente, o termo módulo parece ter sido definido de forma um tanto ambígua, e sua implementação varia de idioma para idioma. Pelo que posso dizer na Wikipedia no Módulo , a implementação do MySQL está usando divisão truncada :

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

Onde você espera que a implementação use divisão por piso :

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

Como você implementou sua primeira solução alternativa, eu diria que é provavelmente a melhor alternativa para o Mod operador.

Pelo que eu vi (e esta é uma análise não científica muito rápida!), parece que linguagens de programação mais imperativas implementam divisão truncada e linguagens matemáticas mais funcionais parecem usar a divisão por piso .