【问题标题】:How do I get the absolute value of an integer without using Math.abs?如何在不使用 Math.abs 的情况下获得整数的绝对值?
【发布时间】:2015-07-27 22:14:53
【问题描述】:

如何不使用使用 math.abs 获得数字的绝对值?

这是我目前所拥有的:

function absVal(integer) {
    var abs = integer * integer;
    return abs^2;
}

【问题讨论】:

  • abs^2 是什么意思?我想你的意思是分开,对吧? (return abs/2)

标签: javascript function integer absolute-value


【解决方案1】:

由于一个数字的绝对值是“这个数字离零有多远”,一个负数可以被“翻转”为正数(如果你原谅我缺乏数学术语=P):

var abs = (integer < 0) ? (integer * -1) : integer;

或者,虽然我没有对其进行基准测试,但从零减去而不是相乘可能会更快(即0 - integer)。

【讨论】:

  • 如果从 0 中减去比 if 语句慢,我会感到震惊
  • @taylorc93 不,不 - 不能代替整个三元语句,代替 (integer * -1) 部分...我可能应该一直写那个 =P跨度>
  • 啊哈,现在更有意义了。是的,这值得进行基准测试,但除非这段代码在程序中运行数百万次,否则我认为它不会产生太大影响
【解决方案2】:

我们没有理由不能借Java's implementation

    function myabs(a) {
      return (a <= 0.0) ? 0.0 - a : a;
    }

    console.log(myabs(-9));

这是如何工作的:

  • 如果给定的数字小于或为零
    • 从0中减去数字,结果将始终为&gt; 0
  • 否则返回号码(因为它是&gt; 0

【讨论】:

  • 这不是一个好的解决方案:如果 a 等于 0,此函数会执行减法,但 0.0-0.0 已经是 0.0,所以 (a &lt;0.0) 更好。其次,不需要减法,因为有一元否定运算符。
  • 感谢您的反馈。我的首要观点是,如果你有一个很好解决的问题需要实施,请查看其他已知的可行解决方案并使用它。
  • 这是一个好点,但 Java 的方式似乎不是最好的 :)
【解决方案3】:

检查数字是否小于零!如果是,则将其与 -1 相乘;

【讨论】:

    【解决方案4】:

    你也可以使用&gt;&gt; (Sign-propagating right shift)

    function absVal(integer) {
        return (integer ^ (integer >> 31)) - (integer >> 31);;
    }
    

    注意:这仅适用于整数

    【讨论】:

      【解决方案5】:

      您可以使用conditional operatorunary negation operator

      function absVal(integer) {
        return integer < 0 ? -integer : integer;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 2020-08-10
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多