我希望得到一个简单的Javascript函数,用来获取两个数之间的差值,使得foo(2, 3)
和foo(3,2)
都能返回相同的差值1。
我希望得到一个简单的Javascript函数,用来获取两个数之间的差值,使得foo(2, 3)
和foo(3,2)
都能返回相同的差值1。
var difference = function (a, b) { return Math.abs(a - b); }
这里有一个简单的函数
function diff (num1, num2) {
if (num1 > num2) {
return num1 - num2
} else {
return num2 - num1
}
}
作为一个更短的、一行的、单参数的、使用三元运算符的箭头函数
function diff (a, b) => a > b ? a - b : b - a
Math.abs(3 - (-5))
的结果是 8 ;) (翻译:@Tom Gullen: Math.abs(3 - (-5))
will return 8 ;)) - Niels van der RestMath.abs()
不是完整的解决方案。 - S.M.MousaviMath.abs()
的解决方案仍然可以返回正确的答案,例如3,-5
的结果为8
。他正在阐述与您试图表达的完全相同的观点... - Gust van de WalMath.abs(a - b);
vs
difference(a, b);
function foo(num1 , num2) {
return Math.abs(num1-num2);
}
function difference(n, m){
return Math.abs(n - m)
}
function diff( x, y ) {
if ( Math.sign( x ) === Math.sign( y ) ) {
return Math.abs( x - y );
} else {
return Math.abs( x ) + Math.abs( y );
};
};
diff( 2, 2 ) // 0
diff( -2, -2 ) // 0
diff( -2, 2 ) // 4
diff( 2, -2 ) // 4
在math.stackexchange.com上的解决方案:https://math.stackexchange.com/a/1893992
Math.abs((-2) - 2)
仍然会得出正确的答案。 - Mateusz Charytoniukpublic getDiff(value: number, oldValue: number) {
return value > oldValue ? value - oldValue : oldValue - value;
}
如果你在处理浮点数 - 上面答案的陷阱就在于数学计算。
例如
> 0.1 + 0.2
0.30000000000000004
在编程计算中,你可以使用类似这样的技巧:
total = parseFloat((total + parseFloat(difference.toFixed(2))).toFixed(2))
定义了四个函数后,我做了一个小基准测试,出乎意料地
fn1 = (a,b)=>(a>b)?a-b:b-a;
fn2 = (a,b)=>{let c= a-b;return c>0?c:-c;}
fn3 = (a,b)=>Math.abs(a-b)
fn4 = (a,b)=>Math.max(a-b, b-a)
for(let fn of [ fn1, fn2, fn3, fn4])
executionTime(()=>{console.log(fn);for(let i=0;i<1_000_000;i++)fn(500_000,i)})
function executionTime(cb){//calculate performance
const t0 = performance.now();
cb();
const t1 = performance.now();
console.log(`cb took ${t1 - t0} milliseconds.`);
}
这里是100万次迭代的结果:
但不幸的是,这些都是虚假的结果,我的意思是逐个执行在控制台上的结果是:
我认为在循环时,每次迭代后垃圾收集器会进行清理,而其他函数正在尽力运行。当逐个执行时,fn2排名第二,使用额外变量(vm正在使用寄存器进行优化?)。
function diff(a,b){return Math.abs(a-b);}
最好和简单的解决方案。 - Alxandrfoo = difference
,这样就完成了 :) - mykhala = -1, b = 1... diff == 2
- Muhammad Umer