javascript - 쿼리 - parseint 파라미터



빈 문자열에 대해 NaN을 parseInt에서 0으로 변환하는 방법은 무엇입니까? (11)

기수를 사용할 수있는 도우미 함수

function parseIntWithFallback(s, fallback, radix) {
    var parsed = parseInt(s, radix);
    return isNaN(parsed) ? fallback : parsed;
}

JavaScript에서 값을 파싱 할 때 NaN 대신 0을 반환 할 수 있습니까?

빈 문자열의 경우 parseIntNaN 합니다.

NaN 을 확인하기 위해 JavaScript에서 이와 비슷한 작업을 수행 할 수 있습니까?

var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)

아니면 뭔가 비슷한 일을 할 수있는 또 다른 함수 또는 jQuery 플러그인이 있을까요?


Answer #1

나를 위해 이것을 처리하기 위해 2 개의 프로토 타입을 만들었습니다. 하나는 숫자이고 다른 하나는 String입니다.

// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
    if (!this.prototype[name]) {
        this.prototype[name] = func;
        return this;
    }
};

// returns the int value or -1 by default if it fails
Number.method('tryParseInt', function (defaultValue) {
    return parseInt(this) == this ? parseInt(this) : (defaultValue === undefined ? -1 : defaultValue);
});

// returns the int value or -1 by default if it fails
String.method('tryParseInt', function (defaultValue) {
    return parseInt(this) == this ? parseInt(this) : (defaultValue === undefined ? -1 : defaultValue);
});

안전 점검을 사용하지 않으려면 다음을 사용하십시오.

String.prototype.tryParseInt = function(){
    /*Method body here*/
};
Number.prototype.tryParseInt = function(){
     /*Method body here*/
};

사용 예 :

var test = 1;
console.log(test.tryParseInt()); // returns 1

var test2 = '1';
console.log(test2.tryParseInt()); // returns 1

var test3 = '1a';
console.log(test3.tryParseInt()); // returns -1 as that is the default

var test4 = '1a';
console.log(test4.tryParseInt(0));// returns 0, the specified default value

Answer #2

또한 이런 식으로, 함수를 작성하고 그 곳에서 호출 할 필요가 없습니다. 계산을 수행하기 위해 양식 필드에 입력하는 것으로 가정합니다.

var Nanprocessor = function (entry) {
    if(entry=="NaN") {
        return 0;
    } else {
        return entry;
    }
}

 outputfield.value = Nanprocessor(x); 

// where x is a value that is collected from a from field
// i.e say x =parseInt(formfield1.value); 

이 일을 잘못 했나요?


Answer #3

비슷한 문제가 (파이어 폭스 v34) 간단한 문자열 :

var myInt = parseInt("b4");

그래서 나는 빠른 해킹을 생각해 냈다 :

var intVal = ("" + val).replace(/[^0-9]/gi, "");

그리고 나서 모든 단순하지 않은 것들에 대해 float + ints를 다루는 모든 어리석은 복잡성을 갖습니다.

var myval = "12.34";

function slowParseNumber(val, asInt){
    var ret = Number( ("" + val).replace(/[^0-9\.]/gi, "") );
    return asInt ? Math.floor(ret) : ret;
}
var floatVal = slowParseNumber(myval);

var intVal = slowParseNumber(myval, true);
console.log(floatVal, intVal);

다음과 같은 경우 0을 반환합니다.

var intVal = slowParseNumber("b"); // yeilds 0

Answer #4

여기에 내가 사용하고있는 tryParseInt 메소드가있다. 이것은 당신이 필요로하는 것이 될 수 있도록 두번째 파라미터로 디폴트 값을 취한다.

function tryParseInt(str, defaultValue) {
    return parseInt(str) == str ? parseInt(str) : defaultValue;
}

tryParseInt("", 0);//0 
tryParseInt("string", 0);//0 
tryParseInt("558", 0);//558

Answer #5

왜 함수를 오버라이드하지 않습니까? 이 경우 NaN 경우 항상 0NaN .

(function(original) {
    parseInt = function() {
        return original.apply(window, arguments) || 0;
    };
})(parseInt);

이제 코드의 어느 위치에서나 :

parseInt('') === 0

Answer #6

isNaN() 함수를 사용할 수도 있습니다.

var s = ''
var num = isNaN(parseInt(s)) ? 0 : parseInt(s)

Answer #7

parseInt 제한되지 않은 사용자의 경우 비트 OR 연산자 (암시 적으로 ToInt32 를 피연산자에 호출 함)를 사용할 수 있습니다.

var value = s | 0;

// NaN | 0     ==>> 0
// ''  | 0     ==>> 0
// '5' | 0     ==>> 5
// '33Ab' | 0  ==>> 0
// '0x23' | 0  ==>> 35
// 113 | 0     ==>> 113
// -12 | 0     ==>> -12
// 3.9 | 0     ==>> 3

참고 : ToInt32parseInt 와 다릅니다. (즉, parseInt('33Ab') === 33 )


Answer #8
// implicit cast
var value = parseInt(tbb*1); // see original question

설명, 사소한 것을 알지 못하는 사람들을 위해 :

"암시 적 형변환"이라는 메서드를 하나씩 곱하면 알 수없는 형식의 피연산자가 원시 형식 인 '숫자'로 변환됩니다. 특히 빈 문자열은 숫자 0이되어 parseInt ()에 적합한 유형이됩니다.

위에 좋은 예제는 PirateApp에 의해 주어 졌는데, PirateApp는 + 기호를 앞에두고 JavaScript가 Number 암시 적 캐스트를 사용하도록했습니다.


Answer #9
//////////////////////////////////////////////////////
function ToInt(x){x=parseInt(x);return isNaN(x)?0:x;}
//////////////////////////////////////////////////////
var x = ToInt('');   //->  x=0
    x = ToInt('abc') //->  x=0
    x = ToInt('0.1') //->  x=0
    x = ToInt('5.9') //->  x=5
    x = ToInt(5.9)   //->  x=5
    x = ToInt(5)     //->  x=5

Answer #10
var value = isNaN(parseInt(tbb)) ? 0 : parseInt(tbb);




nan