图片来源:https://www.pixiv.net/artworks/100578118
C 取模
C语言的取模运算符(%)仅支持整数,定义如下:
a % b == a - ((a / b) * b)对于 a/b , C语言会自动截断计算结果的小数部分, C99规定了”趋零截断”,举个例子 2.14 会截断为 2 , -2.14 会截断为 -2 。
简单来讲,C语言取模结果的符号(正数还是负数)与 a 的符号相同
Lua 取模
Lua取模操作有两种 % 和 math.fmod() ,稍微有一点区别:
math.fmod(a, b)相当于 C语言的a%b,但是支持浮点数
- Lua的取模运算符
(%)支持整数和浮点数,定义如下:
a % b == a - ((a // b) * b)“//” 在lua中称为floor除法(floor division),会将运算结果向负无穷取整(rounds the quotient towards minus infinity),举个例子 2.14 会截断为 2.0 , -2.14 会截断为 -3.0。需要注意的两点:
- Lua中
a%b的结果的符号与b的符号相同 - 对于浮点数,
x - x%0.01会保留两位小数,x - x%0.001会保留三位小数,以此类推
参考:
- 《C Primer Plus(第6版)》
- 《Lua 程序设计(第4版)》
- Stack Overflow – math.fmod always euqls math.mod?
- 博客园 – lua取模运算math.fmod和% 的区别