값이 홀수인지 짝수인지 테스트
매우 간단한 알고리즘으로 간단한 isEven 및 isOdd 함수를 작성하기로 했습니다.
function isEven(n) {
n = Number(n);
return n === 0 || !!(n && !(n%2));
}
function isOdd(n) {
return isEven(Number(n) + 1);
}
n이 특정 파라미터에 포함되어 있는 경우에는 문제가 없지만 많은 시나리오에서 실패합니다.그래서 가능한 한 많은 시나리오에서 정확한 결과를 얻을 수 있는 강력한 함수를 만들기 위해 javascript 수 제한 내의 정수만 테스트하고 다른 모든 것은 false(+ 및 - infinity 포함)를 반환했습니다.0은 짝수입니다.
// Returns true if:
//
// n is an integer that is evenly divisible by 2
//
// Zero (+/-0) is even
// Returns false if n is not an integer, not even or NaN
// Guard against empty string
(function (global) {
function basicTests(n) {
// Deal with empty string
if (n === '')
return false;
// Convert n to Number (may set to NaN)
n = Number(n);
// Deal with NaN
if (isNaN(n))
return false;
// Deal with infinity -
if (n === Number.NEGATIVE_INFINITY || n === Number.POSITIVE_INFINITY)
return false;
// Return n as a number
return n;
}
function isEven(n) {
// Do basic tests
if (basicTests(n) === false)
return false;
// Convert to Number and proceed
n = Number(n);
// Return true/false
return n === 0 || !!(n && !(n%2));
}
global.isEven = isEven;
// Returns true if n is an integer and (n+1) is even
// Returns false if n is not an integer or (n+1) is not even
// Empty string evaluates to zero so returns false (zero is even)
function isOdd(n) {
// Do basic tests
if (basicTests(n) === false)
return false;
// Return true/false
return n === 0 || !!(n && (n%2));
}
global.isOdd = isOdd;
}(this));
위의 문제점을 알 수 있는 사람이 있습니까?더 나은 버전(더 정확한 버전, 더 빠른 버전 또는 더 간결한 버전)이 있습니까?
다른 언어에 관한 투고는 여러 가지가 있습니다만, ECMAScript의 확정판을 찾을 수 없는 것 같습니다.
계수 사용:
function isEven(n) {
return n % 2 == 0;
}
function isOdd(n) {
return Math.abs(n % 2) == 1;
}
Javascript의 모든 값이 다음 값을 가진 숫자로 강제될 수 있는지 확인할 수 있습니다.
Number.isFinite(parseFloat(n))
이 체크는 다음 주소 이외의 장소에서 실시하는 것이 바람직합니다.isEven그리고.isOdd두 기능 모두 오류 처리를 중복할 필요가 없습니다.
비트 테스트를 사용하는 것이 좋습니다.
if(i & 1)
{
// ODD
}
else
{
// EVEN
}
첫 번째 비트가 홀수를 나타내고 있는지 여부를 테스트합니다.
아래는 어떻습니까?IE에서만 테스트했습니다만, 임의의 길이의 숫자, 정수 또는 플로트인 실제 숫자, 부울, 정의되지 않은, 늘, 배열 또는 개체를 통과하면 두 함수가 false를 반환하는 것을 매우 기쁘게 생각했습니다.(문자열이 전달되었을 때 선행 공백과 후행 공백 중 어느 쪽을 무시할지, 두 함수가 모두 false를 반환하는 것은 아니라고 가정합니다.)
function isEven(n) {
return /^-?\d*[02468]$/.test(n);
}
function isOdd(n) {
return /^-?\d*[13579]$/.test(n);
}
주의: 음수도 있습니다.
function isOddInteger(n)
{
return isInteger(n) && (n % 2 !== 0);
}
어디에
function isInteger(n)
{
return n === parseInt(n, 10);
}
왜 이렇게 하지 않는 거죠?
function oddOrEven(num){
if(num % 2 == 0)
return "even";
return "odd";
}
oddOrEven(num);
로버트 브리시타의 비트 테스트를 완료하기 위해.
if ( ~i & 1 ) {
// Even
}
var isOdd = x => Boolean(x % 2);
var isEven = x => !isOdd(x);
var isEven = function(number) {
// Your code goes here!
if (number % 2 == 0){
return(true);
}
else{
return(false);
}
};
코드 한 줄만 있으면 돼!
여기에서는 JS 함수에 대해 새로운 ES6 구문을 사용하고 JS 함수에 대해 한 줄 구문을 사용하는 새롭고 대체적인 방법을 보여 줍니다.if-else스테이트먼트 콜:
const isEven = num => ((num % 2) == 0);
alert(isEven(8)); //true
alert(isEven(9)); //false
alert(isEven(-8)); //true
Steve Mayne 답변의 간단한 수정/개량!
function isEvenOrOdd(n){
if(n === parseFloat(n)){
return isNumber(n) && (n % 2 == 0);
}
return false;
}
참고: 유효하지 않은 경우 false를 반환합니다.
조금
x % 2 == 0; // Check if even
!(x & 1); // bitmask the value with 1 then invert.
((x >> 1) << 1) == x; // divide value by 2 then multiply again and check against original value
~x&1; // flip the bits and bitmask
다른 방법:
var isEven = function(number) {
// Your code goes here!
if (((number/2) - Math.floor(number/2)) === 0) {return true;} else {return false;};
};
isEven(69)
다른 방법으로는 스트링을 사용합니다.왜냐하면
function isEven(__num){
return String(__num/2).indexOf('.') === -1;
}
if (testNum == 0);
else if (testNum % 2 == 0);
else if ((testNum % 2) != 0 );
이거요? 만약 (우리 번호 % 2!== 0)
var num = someNumber
isEven;
parseInt(num/2) === num/2 ? isEven = true : isEven = false;
for(var a=0; a<=20;a++){
if(a%2!==0){
console.log("Odd number "+a);
}
}
for(var b=0; b<=20;a++){
if(b%2===0){
console.log("Even number "+b);
}
}
번호가 짝수 코드 행에 있는지 확인합니다.
var iseven=(_)=>_%2==0
홀수인지 짝수인지 여부를 테스트하기 위해 이 방법도 사용할 수 있습니다.
const comapare = x => integer(checkNumber(x));
function checkNumber (x) {
if (x % 2 == 0) {
return true;
}
else if (x % 2 != 0) {
return false;
}
}
function integer (x) {
if (x) {
console.log('even');
}
else {
console.log('odd');
}
}
최신 Javascript 스타일 사용:
const NUMBERS = "nul one two three four five six seven ocho nueve".split(" ")
const isOdd = n=> NUMBERS[n % 10].indexOf("e")!=-1
const isEven = n=> isOdd(+n+1)
if (i % 2) {
return odd numbers
}
if (i % 2 - 1) {
return even numbers
}
이게 더 간단해!
var num = 3 //instead get your value here
var aa = ["Even", "Odd"];
alert(aa[num % 2]);
function isEven(n) {return parseInt(n)%2===0?true:parseInt(n)===0?true:false}
0/짝수 원했을 때
isEven(0) //true
isEven(1) //false
isEven(2) //true
isEven(142856) //true
isEven(142856.142857)//true
isEven(142857.1457)//false
언급URL : https://stackoverflow.com/questions/6211613/testing-whether-a-value-is-odd-or-even
'programing' 카테고리의 다른 글
| 입력 텍스트 내부의 아이콘 지우기 (0) | 2022.09.30 |
|---|---|
| CSV 파일에 Python 목록 쓰기 (0) | 2022.09.30 |
| 입력 필드의 너비를 입력에 맞춥니다. (0) | 2022.09.30 |
| console.dir와 console.log의 차이점은 무엇입니까? (0) | 2022.09.30 |
| 필드에서의 장고 regexp (0) | 2022.09.30 |