【发布时间】:2013-01-11 04:47:43
【问题描述】:
我想知道 JavaScript 如何处理模数。例如,JavaScript 会将47 % 8 评估为什么?我似乎找不到任何关于它的文档,而且我的模数技能也不是最好的。
【问题讨论】:
标签: javascript modulo
我想知道 JavaScript 如何处理模数。例如,JavaScript 会将47 % 8 评估为什么?我似乎找不到任何关于它的文档,而且我的模数技能也不是最好的。
【问题讨论】:
标签: javascript modulo
就像每种语言处理模数一样:X / Y 的余数。
47 % 8 == 7
此外,如果您使用 Firefox + Firebug、Safari、Chrome 甚至 IE8+ 等浏览器,您可以像按 F12 一样快速测试此类操作。
【讨论】:
%视为余数运算符而不是模运算符...stackoverflow.com/q/13683563/3651800
% 作为余数而不是模数。这与其他所有语言并不完全相同:事实上,许多语言确实使用 % 进行取模
当输入负数(左侧)时,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
【讨论】:
【讨论】:
为了更好地理解模数,它是如何构建的;
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
}
【讨论】: