2012-04-05 1 views
0

rfd_total > max_rfd이 맞습니까? 나는 rfd_total 다음 코드에 이상 max_rfd을 수있는 방법을 이해하지 않습니다 rfd_totalmax_rfd이 문자열이기 때문에이 코드에서 한 변수가 다른 변수보다 큰 이유는 무엇입니까?

max_rfd = parseFloat(jQuery('#mx-rfd_'+order_id).val()).toFixed(2); 

rfd_total = parseFloat(items_total+tax_total+shipping+allowances*1).toFixed(2); 


if(rfd_total > max_rfd) 
{ if(isNaN(rfd_total)) alert('rfd_total isNaN'); // not triggered 
    if(isNaN(max_rfd)) alert('max_rfd isNaN'); // not triggered 
    alert(rfd_total); // alerts 51.16 
    alert(max_rfd); // alerts 102.32 
    return false; 
} 
+0

으로 제대로 기능을 사용하면 코드를 깨끗하게 유지할 수 있고 그렇게 거기에 CONSOLE.LOG (max_rfd, rdf_total)를 가져옵니다. Chrome dev-tools 또는 Firebug를 가져 와서 출력을 확인하십시오. 그들의 값과 그것들이 문자열인지 숫자인지를 볼 수 있습니다;) if 문 (if ((rfd_total * 1)> (max_rfd * 1))에서 빠른 테스트를위한 –

+0

은 숫자로 변환해야합니다. 그러면 원하는 결과를 얻을 수 있습니다. 그런 다음 parseFloat를 대체하여 초기 변수를 적용합니다. 편집 : 그리핀 toFixed() 문자열을 반환합니다 지적했다. 그 방법을 사용하려면 toFixed() 뒤에 1을 곱하십시오. –

+0

@MikeDepies rfd_total 설정에서 * 1 접근 방식을 사용했지만, 내가 얻지 못하는 이유는 isNaN (rfd_total) NOR isNaN (max_rfd)이 true를 반환하는 이유입니다. – WallabyKid

답변

4

그것입니다.

"51.16" > "102.32"이 true를 반환합니다.

toFixed()은 문자열을 반환합니다.

변수를 숫자로 강제 변환해야합니다.이를 통해 빠른 검색을 수행하는 방법을 알 수 있습니다.

또는이 하나

function decimalRoundTo(n, decimalPlaces) { 
    var d = Math.pow(10, decimalPlaces); 
    return Math.round(n*d)/d; 
} 
+0

그럼 거기에 가십 시요! 나에게 뉴스. 그것은 soooo를 많이 설명합니다. 나는 결코 모른다 문자열을 retunred toFixed()! ... 그렇다면 isNaN()이 false를 반환하지 않습니까? – WallabyKid

+0

@WallabyKid, 네 말이 맞아. 'isNaN'은'false'를 반환합니다. 이것이 귀하의 경고가 유발되지 않는 이유입니다. 나는 내 대답 btw에 조금 더 추가했습니다. – Griffin

+0

false로 반환 나는 진정한 의미를 의미! 예 : rfd_total은 문자열이기 때문에 NaN입니다. 권리? – WallabyKid

관련 문제