C 和 Lua 取模运算的异同

图片来源: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。需要注意的两点:

  1. Lua中 a%b 的结果的符号与 b 的符号相同
  2. 对于浮点数,x - x%0.01 会保留两位小数,x - x%0.001 会保留三位小数,以此类推

参考:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注