【问题标题】:How does JavaScript handle modulo?JavaScript 如何处理模数?
【发布时间】:2013-01-11 04:47:43
【问题描述】:

我想知道 JavaScript 如何处理模数。例如,JavaScript 会将47 % 8 评估为什么?我似乎找不到任何关于它的文档,而且我的模数技能也不是最好的。

【问题讨论】:

    标签: javascript modulo


    【解决方案1】:

    就像每种语言处理模数一样:X / Y 的余数。

    47 % 8 == 7
    

    此外,如果您使用 Firefox + Firebug、Safari、Chrome 甚至 IE8+ 等浏览器,您可以像按 F12 一样快速测试此类操作。

    【讨论】:

    • 请注意,一些语言(尤其是C)将%视为余数运算符而不是运算符...stackoverflow.com/q/13683563/3651800
    • 这个答案是不正确的,因为模与余数不同,JavaScript 确实使用% 作为余数而不是模数。这与其他所有语言并不完全相同:事实上,许多语言确实使用 % 进行取模
    【解决方案2】:

    当输入负数(左侧)时,Javascript 的模运算符返回一个负数。

    14 % 5 // 4
    15 % 5 // 0
    -15 % 5 // -0
    -14 % 5 // -4
    

    (注意:负零在 JavaScript 和其他具有 IEEE 浮点数的语言中是一个不同的值,但 -0 === 0 所以你通常不必担心它。)

    如果您想要一个始终介于 0 和您指定的正数之间的数字,您可以定义如下函数:

    function mod(n, m) {
        return ((n % m) + m) % m;
    }
    
    mod(14, 5) // 4
    mod(15, 5) // 4
    mod(-15, 5) // 0
    mod(-14, 5) // 1
    

    【讨论】:

      【解决方案3】:

      Modulo 的行为应该如您所愿。我期待。

      47 % 8 == 7
      

      Fiddle Link

      【讨论】:

        【解决方案4】:

        为了更好地理解模数,它是如何构建的;

        function modulo(num1, num2) {
            if (typeof num1 != "number" || typeof num2 != "number"){
              return NaN
            }
            var num1isneg=false
             if (num1.toString().includes("-")){
              num1isneg=true
            }
              num1=parseFloat(num1.toString().replace("-",""))
              var leftover =parseFloat( ( parseFloat(num1/num2) - parseInt(num1/num2)) *num2)
              console.log(leftover)
                    if (num1isneg){
                      var z = leftover.toString().split("")
                      z= ["-", ...z]
                      leftover = parseFloat(z.join(""))
                    }
                    return leftover
        }
        

        【讨论】:

          猜你喜欢
          • 2016-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-15
          • 2011-01-14
          • 2020-05-17
          • 2018-05-02
          相关资源
          最近更新 更多