【问题标题】:Reverse number with sign带符号的倒数
【发布时间】:2018-08-26 16:43:03
【问题描述】:

如何反转包括符号在内的数字? (例如:-659 => -956

此外,末尾带零的数字应按以下方式颠倒:

1000 => 1

50000 => 5

我目前的结果是:

-784 => 487-

1000 => 0001

这是我的功能:

function reverseNumber(num)
{
    num = num.toString();
    return num.split("").reverse().join("");
}
console.log(reverseNumber(-5698));

【问题讨论】:

  • 好的,你能指出你所有的功能都失败了吗?那么也许我们可以解决具体问题?
  • 那么你为什么需要这个?这是一个有趣的要求。 :-)

标签: javascript function reverse


【解决方案1】:

您可以在处理前检查号码的符号。这是一个工作示例

function reverseNumber(num)
{
  sign = num < 0 ? '-' : '';
  num = Math.abs(num) + "";
  return Number(sign + num.split("").reverse().join(""));
}
console.log(reverseNumber(-1000));

【讨论】:

  • 谢谢,它有效,但问题:1000 => 0001 仍在发生应该像 1000 => 1
  • 在返回字符串结果之前,我将其转换为数字。由于数字前面的0被过滤掉,它给出了预期的结果
【解决方案2】:

您可以使用绝对值保存符号并在以后应用。

function reverse(n) {
    return (n > 0 || -1) * Math.abs(n).toString().split('').reverse().join('');
}

console.log(reverse(-1000));
console.log(reverse(1000));

【讨论】:

  • 谢谢,它有效,但问题:1000 => 0001 仍在发生应该像 1000 => 1
  • @John,它做到了,因为乘法,所有字符串都转换为数字。
【解决方案3】:

这是一种使用辅助函数来处理反转的方法,然后根据n 的符号在reverseNumber 函数中有条件地调用它:

const reverse = s => ("" + s).split("").reverse().join("");

const reverseNumber = n => +(n < 0 ? `-${reverse(-n)}` : reverse(n));

console.log(reverseNumber(-5698));
console.log(reverseNumber(-1));
console.log(reverseNumber(-1.3));
console.log(reverseNumber(1000));

【讨论】:

    【解决方案4】:

    设置negative标志f数字为负,使用数字的绝对值,如果negative标志设置为true,则在返回之前将其转换回负数

    function reverseNumber(num){
        let negative = (num<0) ? true : false;
        num = Math.abs(num).toString();
        num = Number(num.split("").reverse().join("") )
        return negative ? (num*-1) : num 
    }
    console.log(reverseNumber(-5698));
    console.log(reverseNumber(1000));

    【讨论】:

      【解决方案5】:

      您也可以使用Math.sign() 尝试这种方式来检查数字是正数、负数还是零。然后使用标志,例如negativefalse,如果Math.sign(num) 返回负值,即&lt;1,然后将其设置为true。在使用reverse() 反转它之前,还可以使用Math.abs() 使其始终为正。最后根据negative 标志在数字前加上符号。

      function reverseNumber(num) {
        pos_neg = Math.sign(num);
        negative = false;
        if (pos_neg < 1) {
          // treat as negative value
          negative = true;
          num = Math.abs(num);
        }
      
        num = num + "";
        expression = Number(num.split("").reverse().join(""));
        return negative ? - expression : expression ;
      }
      console.log(reverseNumber(1000));
      console.log(reverseNumber(50000));
      console.log(reverseNumber(-784))

      【讨论】:

        【解决方案6】:

        首先将数字转换为其绝对值,然后将其反转。如果数字是负数,则在末尾附加“-”号。此外,如果反转的数字有前导零,则在 reg 表达式的帮助下将其消除。

        function reverseNumber(num)
        {
           var reversed = Math.abs(num).toString().split("").reverse().join("");
           reversed = (num < 0) ? reversed + "-": reversed;
           return reversed.replace(/^0+/, '');
        }
        console.log(reverseNumber(10000));
        console.log(reverseNumber(-987));
        console.log(reverseNumber(-10000));

        【讨论】:

          【解决方案7】:
          function reverseNumber(num)
          {
              var sign = Math.sign(num);
              return parseInt(num.toString().replace("-","").split("").reverse().join(""),10) * sign;
          }
          

          处理浮点更正确:

          function reverseNumber(num)
          {
              var sign = Math.sign(num);
              return Number(Math.Abs(num).toString().split("").reverse().join("")) * sign;
          }
          

          【讨论】:

          • 为什么要在这个字符串的末尾添加“10”? parseInt(num.toString().replace("-","").split("").reverse().join(""),10)
          • 它告诉它使用基数 10。如果它以零开头,它将无法正确解析。使用 Number() 是一个更好的选择。它也适用于浮点数。
          猜你喜欢
          • 2014-01-12
          • 2016-05-11
          • 1970-01-01
          • 2019-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-25
          相关资源
          最近更新 更多