Javascript-标识正0和负0

时间:2019-11-04 06:51:27

标签: javascript zero

我有一个要求,我必须确定该数字是正0还是负0,并为这些数字进行颜色编码。这仅适用于0,而不能大于或小于0

即:

  1. 0.00000983(正零)

  2. -0.0000343(负零)

我尝试了下面的方法,但这对0带有小数的值没有帮助。请指导。

function isMinusZero(value) {
  return 1/value === -Infinity;
}

isMinusZero(0); // false
isMinusZero(-0); // true

5 个答案:

答案 0 :(得分:2)

这里是替代方法:

function isMinusZero(value) {
  if (Object.is(value, -0)) return true;   // handles OP's specific requirement
  if (value === 0) return false;
  return 1/Math.abs(Math.ceil(value)) === Infinity;
}

console.log(isMinusZero(1234)); // false
console.log(isMinusZero(-1223)); // false
console.log(isMinusZero(0)); // false
console.log(isMinusZero(-0)); // true
console.log(isMinusZero(0.0000000000000000000000000000000000000000976767)); // false
console.log(isMinusZero(-0.0000000000000000000000000000000000000000967676767)); // true
console.log(isMinusZero(-0.0000000000003400003400000000000000034000000000967676767)); // true

参考文献:

答案 1 :(得分:1)

您正在搜索Math.sign()

  • 如果参数为正,则返回1。
  • 如果参数为负,则返回-1。
  • 如果参数为正零,则返回0。
  • 如果参数为负零,则返回-0。
  • 否则,将返回NaN。

答案 2 :(得分:1)

使用Object.is的另一种解决方案:

function isMinusZero(value) {
  return Object.is(-0, value);
}

console.log(
  isMinusZero(0), // false
  isMinusZero(-0) // true
)

答案 3 :(得分:0)

您可以使用Math.sign()

function isZeroSign(value){

return   Math.sign(value) > 0 ;

}

console.log(isZeroSign(0.00022));
console.log(isZeroSign(-0.0033));
console.log(isZeroSign(5500));
console.log(isZeroSign(-0.000000000000000000000000041))

答案 4 :(得分:-3)

这是您的解决方案

function isMinusZero(value) {
  return value.toString().startsWith("-");
}
console.log(
  isMinusZero(0), // false
  isMinusZero(-0) // true
)