【问题标题】:Validate if a value is a whole number [duplicate]验证值是否为整数[重复]
【发布时间】:2013-05-04 19:09:23
【问题描述】:

我认为 isNaN 不适合我的情况。我想确保某个变量在验证时只包含整数。所以在我的情况下 -1.45 不应该被允许。 1、23、334 等值应该是允许/有效的。

【问题讨论】:

  • 整数不包括负数。所以一个完整的答案是function isWholeNumber(v){return Number.isInteger(v) && v >= 0}
  • 我认为这个问题不是重复的,因为它询问的是整数,而不是“浮点数或整数”。

标签: javascript


【解决方案1】:

第 1 部分:

您可以使用remainder 运算符来查找值是否为整数:

function isWholeNumber(value) {
  if (value % 1 === 0) {
    console.log(value + ' is a whole number');
  } else {
    console.log(value + ' is not a whole number');
  }
}

// Display the result here
isWholeNumber(1.45);
isWholeNumber(23);

说明:

  • 余数运算符返回一个操作数除以第二个操作数时剩余的余数。
  • 例如,1.45 % 1 返回0.4499999999999999623 % 1 返回0
  • 所以,现在如果是value % 1 === 0,那么我们可以说value 是一个整数,否则就不是。

第 2 部分:

value 实际上不是number 的某些情况下,此逻辑会失败,因为remainder 运算符 (%) 会将其操作数转换为如下数字:

function isWholeNumber(value) {
  console.log(value % 1); //<--- result is always 0
  if (value % 1 === 0) {
    console.log(value + ' is a whole number');
  } else {
    console.log(value + ' is not a whole number');
  }
}

// Display the result here
isWholeNumber('23');
isWholeNumber('');
isWholeNumber(true);

这会导致显示不正确的结果,例如空字符串和布尔值显示为整数。我们可以通过检查type of 的值为number 来解决这个问题,例如:

function isWholeNumber(value) {
  if (typeof value === 'number' && value % 1 === 0) {
    console.log(value + ' is a whole number');
  } else {
    console.log(value + ' is not a whole number');
  }
}

// Display the result here
isWholeNumber(1.45);
isWholeNumber(24);
isWholeNumber('23');
isWholeNumber('');
isWholeNumber(true);

第 3 部分:

ES6 全局对象 Number 中获得了一个新属性 Number.isInteger(value)。它检查value 是否是一个整数,例如:

// Display the result here
console.log(Number.isInteger(1.45));
console.log(Number.isInteger(24));
console.log(Number.isInteger('23'));
console.log(Number.isInteger(''));
console.log(Number.isInteger(true));

我们可以将它与我们的 modified isWholeNumber 函数集成在第 #2 部分中,例如:

function isWholeNumber(value) {
  if (Number.isInteger(value)) {
    console.log(value + ' is a whole number');
  } else {
    console.log(value + ' is not a whole number');
  }
}

// Display the result here
isWholeNumber(1.45);
isWholeNumber(24);
isWholeNumber('23');
isWholeNumber('');
isWholeNumber(true);

【讨论】:

  • 这些方法对于12345678901234567.5等大数字会失败
【解决方案2】:

isNaN()是检查数字与否,它不会检查数字是否完整。

function isInt(n) {
   return n % 1 === 0;
}

if (number % 1 == 0) {
    alert('Whole Number');
} else {
    alert('Not a Whole Number');
}

【讨论】:

  • 你只是复制粘贴Palash的答案吗?不是很酷。
  • ...从另一个答案复制而来。
猜你喜欢
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2021-04-19
相关资源
最近更新 更多