MySQL giver dig ikke et falsk resultat, det bruger simpelthen en anden implementering af modul, end du forventer. Desværre ser begrebet modul ud til at være blevet defineret noget tvetydigt, og dets implementering varierer fra sprog til sprog. Efter hvad jeg kan se i Wikipedia på Modulo , MySQL's implementering bruger trunkeret division :
r = a - n * trunc(a / n)
Hvor du forventer, at implementeringen bruger gulvopdeling :
r = a - n * floor(a / n)
Siden det var sådan, du implementerede din første løsning, vil jeg sige, at det sandsynligvis er det bedste alternativ til Mod
operatør.
Ud fra hvad jeg har set (og dette er en meget hurtig uvidenskabelig analyse!), ser det ud til, at mere tvingende programmeringssprog implementerer trunkeret division og mere funktionelle matematiske sprog ser ud til at bruge gulvopdeling .