MySQL vám nedává falešný výsledek, prostě používá jinou implementaci modulu, než očekáváte. Bohužel se zdá, že termín modul byl definován poněkud nejednoznačně a jeho implementace se jazyk od jazyka liší. Z toho, co mohu říci na Wikipedii na Modulo , implementace MySQL používá zkrácené dělení :
r = a - n * trunc(a / n)
Kde očekáváte implementaci pomocí podlahového dělení :
r = a - n * floor(a / n)
Vzhledem k tomu, jak jste implementovali své první řešení, řekl bych, že je to pravděpodobně nejlepší alternativa k Mod
operátor.
Z toho, co jsem viděl (a to je velmi rychlá nevědecká analýza!), se zdá, že imperativnější programovací jazyky implementují zkrácené dělení a funkčnější matematické jazyky zřejmě používají podlahové dělení .