Lua十进制符号?

5 lua sign function decimal

我在其他语言中使用过这个,但是lua似乎缺乏这个相当有用的功能.

你们中的一个漂亮的小狗能为我提供一个lua函数来获取传递给它的数字的符号吗?

lhf*_*lhf 12

function math.sign(x)
   if x<0 then
     return -1
   elseif x>0 then
     return 1
   else
     return 0
   end
end
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是一个致命的罪. (9认同)
  • 我不会对标准库命名空间进行规范. (3认同)
  • IMO,只有在尚未可用且名称空间污染正常的情况下才更改它:`math.sign = math.sign或function(x)返回x <0和-1或x> 0和1或0结束`(当然,如果它们定义相同的函数,这依赖于使用相同行为的其他库) (3认同)

kik*_*ito 8

万一有人偶然发现这个:这是我的某种短版本:

function sign(x)
  return x>0 and 1 or x<0 and -1 or 0
end
Run Code Online (Sandbox Code Playgroud)


小智 8

我认为这个想法是返回 1 或 -1 来代表正数或负数。我认为你不希望它返回 0。可能会产生灾难性的影响。想象一下,当值返回 0 时,尝试通过将其乘以符号(x)来更改该值的符号。您无需更改符号,而是将值更改为 0。

我会坚持

function sign(x)
  return (x<0 and -1) or 1
end
Run Code Online (Sandbox Code Playgroud)


Nic*_*kis -2

sign你可以这样检查:

i = -2
if i == math.abs(i) then -- or i >= 0
   print "positive"
else
   print "negative"
end
Run Code Online (Sandbox Code Playgroud)

  • -1:当您可以使用单个比较运算符检查负数时,为什么要调用函数并进行比较?在 Lua 中,我不认为这会失败,但在其他语言中,例如,如果 i 类型为 int 并且 math.abs 返回 double,则可能会失败。不要编写不必要的代码。 (3认同)
  • @Nick它并不像lhs的代码那样清楚地表达意图。它试图变得聪明,这通常是一个坏习惯。 (2认同)