图片来源: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和% 的区别
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。