MySQLはあなたに偽の結果を与えていません、それは単にあなたが期待しているものとは異なるモジュラスの実装を使用しています。残念ながら、モジュラスという用語はやや曖昧に定義されているようであり、その実装は言語ごとに異なります。 Wikipedia onModulo で私が言えることから 、MySQLの実装は切り捨てられた除算を使用しています :
r = a - n * trunc(a / n)
実装でフロア除算を使用することを期待している場合 :
r = a - n * floor(a / n)
これが最初の回避策を実装した方法なので、おそらくMod
の最良の代替手段だと思います。 オペレーター。
私が見たものから(そしてこれは非常に迅速な非科学的な分析です!)、より命令型のプログラミング言語が切り捨てられた除算を実装しているようです。 より機能的な数学言語は床の除算を使用しているようです 。