2011-07-27 4 views
1

더하기, 빼기 등과 같이 10 진수 값을 갖는 일부 수학을 수행하려고합니다.10 진수 값이 더 이상 작동하지 않고 문자열을 반환 함

그래서 저는 두 가지 기능을 썼습니다.

function to_decimal(i){ 
    var $dec = parseFloat(i); 
    return $dec.toFixed(2); 
} 

function calc_price(){ 
    var $t = $('#sub_total .total').text(); 
    var $total = to_decimal($t); 

    $('#price_list ul li').each(function(){ 
     var $p = to_decimal($(this).find('.item_price').text()); 
     $total = $total + $p; 
    }); 

    $t = $('#sub_total .total').text($total); 
} 

그러나이 함수 결과가 문제가 0.0010.30

같은 문자열을 반환하기 때문에 내가 생각 제대로 작동하지?

+3

'. –

답변

5

당신은 그 진술의 + 뿅를 추가 할 필요가 당신은 괜찮아요 : 문자열을 숫자로 변환합니다

return +$dec.toFixed(2); 

. 문자열을 변환 할 수 없으면 NaN 값을 반환합니다.

return $dec.toFixed(2); 

해야 할 것 : 대신의

+0

동등한 대안으로, 나는 종종'$ dec.toFixed (2) * 1'을 대신 사용합니다 (하나씩 곱하기). 나는 내 의도를 나중에 알게 될 것 같아. '+'는 놓치기 힘듭니다. –

0

return Math.round($dec*100)/100; 
0

toFixed 방법은 문자열을 반환합니다. 출력에 영향을 미치지 않는 모든 수학 연산은 (누구의 운영자 불행하게도 문자열 연결 연산자로 두 배로 또한 제외) 문자열을 숫자로 변환 할 수 있습니다 :

$dec.toFixed(2) - 0 
$dec.toFixed(2)/1 
$dec.toFixed(2) * 1 
+$dec.toFixed(2) 

이 가장 빠른 방법입니다.

Number($dec.toFixed(2)) 

: 속도가 중요하지 않은 경우 문자열을 숫자로 변환 한 후 깨끗한, 가장 읽을 수있는 방법을 (그리고 아마도없는 작업의 작은 숫자를 수행 할 때) 그러나, Number 생성자입니다 편집 : 위의 성능 정보는 더 이상 보편적으로 사실 일 수 없습니다. Number 생성자는 실제로 IE 7.0과 Firefox 5의 각 대안보다 상당히 느리지 만 사실 Chrome 12.0.742에서 최고 성능을 발휘합니다.

참조 : 문자열을 반환 toFixed`

+0

감사합니다. 나는 너의 포스트에서 무언가를 배웠다. 그러나 jAndy의 응답은 잘 작동합니다. –