Javascript数学对象方法 - 负数为零

Posted

技术标签:

【中文标题】Javascript数学对象方法 - 负数为零【英文标题】:Javascript Math Object Methods - negatives to zero 【发布时间】:2011-06-22 22:18:22 【问题描述】:

javascript 中我似乎找不到将负数设置为零的方法?

-90 变成 0 -45 变为 0 0变成0 90变成90

有类似的吗?我刚刚对数字进行了四舍五入。

【问题讨论】:

【参考方案1】:

只是做一些类似的事情

value = value < 0 ? 0 : value;

if (value < 0) value = 0;

value = Math.max(0, value);

【讨论】:

快速 JSPerf 显示 value = value jsperf.com/negatives-to-zero 我最喜欢Math.max,因为它只需要引用一次value 在更公平的基准测试中,Math.max 获胜可能是因为它已经实例化了一次。 jsbench.me/tbkmm8varf/1 @insign - 每次运行您的基准测试时,我都会得到不同的结果 - 有时是 3 路平局。如果它们之间的边距如此接近,似乎可读性和一致性是更重要的因素。【参考方案2】:

我想你可以使用Math.max()

var num = 90;
num = ~~Math.max(0,num); // 90

var num = -90;
num = ~~Math.max(0,num); // 0

【讨论】:

我认为这应该是公认的答案。只是说... :) 要记住的一点是 Math.max(0, NaN)Math.max(0, undefined) 都返回 NaN 所以你可能想要按照这些思路做一些事情:Math.max(0, num) || 0【参考方案3】:

如果你想变得聪明:

num = (num + Math.abs(num)) / 2;

但是,Math.max 或条件运算符会更容易理解。 此外,这对大数字有精度问题。

【讨论】:

【参考方案4】:
Math.positive = function(num) 
  return Math.max(0, num);


// or 

Math.positive = function(num) 
  return num < 0 ? 0 : num;

【讨论】:

零既不是正数也不是负数,你的函数应该据此重命名【参考方案5】:

x &lt; 0 ? 0 : x 完成这项工作。

【讨论】:

【参考方案6】:

记住负零。

function isNegativeFails(n) 
    return n < 0;

function isNegative(n) 
    return ((n = +n) || 1 / n) < 0;

isNegativeFails(-0); // false
isNegative(-0); // true
Math.max(-0, 0); // 0
Math.min(-0, 0); // -0

来源:http://cwestblog.com/2014/02/25/javascript-testing-for-negative-zero/

【讨论】:

【参考方案7】:

value = Math.max(0,value) 很简洁,但 10 年后,我只是不想再提及另一种好方法。

value < 0 && (value = 0);

【讨论】:

以上是关于Javascript数学对象方法 - 负数为零的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Pandas 数据框中的负数替换为零

[JavaWeb-JavaScript]JavaScript_Math数学对象

为啥模运算符的行为与数学派系 MOD 不同

JavaScript -- 常用的日期对象和数学对象

HTML 学习笔记 JavaScript (Math和Number对象)

javaScript常用方法