2010-04-24 1 views
1

쇼핑 사이트에서 일하고 있는데 제품의 부분합을 계산하려고합니다.Jquery 버그? 두 숫자가 곱한 후에 긴 십진수

getJSON 응답 배열에서 배열과 수량에 따른 가격이 있습니다. 그들 중 두 명이

이 소계입니다. 수량을 변경할 수 있으며 다른 부분합이 나옵니다. 나는 특정 번호로 수량을 변경할 때

그러나, 최종 합계는

259.99999999994 또는 일부 긴 진수 같다. console.log를 사용하여 $ price 및 $ qty를 확인합니다. 둘 다 올바른 형식으로되어 있습니다 .299.99 및 6 수량. 나는 어떤 일이 일어나는지 전혀 모른다. 누군가가 그것에 대해 나를 도울 수 있으면 감사하겠습니다.

다음은 내 Jquery 코드입니다.

$(".price").each(function(index, price){ 

    $price=$(this); 

    //get the product id and the price shown on the page 
    var id=$price.closest('tr').attr('id'); 
var indiPrice=$($price).html(); 

    //take off $ 
indiPrice=indiPrice.substring(1) 

    //make sure it is number format 
    var aindiPrice=Number(indiPrice); 

    //push into the array 
productIdPrice[id]=(aindiPrice); 

var에 URL = update.php

$.getJSON(
    url, 
    {productId:tableId, //tableId is from the other jquery code which refers to   
    qty:qty},    productId 

function(responseProduct){ 

$.each(responseProduct, function(productIndex, Qty){ 
//loop the return data 
if(productIdPrice[productIndex]){ 
//get the price from the previous array we create X Qty 
    newSub=productIdPrice[productIndex]*Number(Qty); 
     //productIdPrice[productIndex] are the price like 199.99 or 99.99 
     // Qty are Quantity like 9 or 10 or 3 
sum+=newSub; 
newSub.toFixed(2); //try to solve the problem with toFixed but 
         didn't work     
console.log("id: "+productIdPrice[productIndex]) 
console.log("Qty: "+Qty); 
console.log(newSub); **//newSub sometime become XXXX.96999999994** 

}; 

감사를 다시!

답변

1

당신은 거의가 있지만, .toFixed()반환 값이, 그것이 제대로이 중 하나를 나타납니다 않은 당신의 예를 들어, 값을 설정하지 않습니다

newSub = newSub.toFixed(2); 
//or... 
console.log(newSub.toFixed(2)); 

중 하나가 설정 한 변수를 .toFixed(2) 값으로 변경하거나 표시 할 때 함수를 호출하십시오 (계산 초기에 반올림 오류가 발생하지 않았으므로 일반적으로 가장 정확합니다).

+0

남자 ... 나는 내가 가까웠다는 것을 알았다! 고마워요! 이 나쁜 10 진수 계산은 어떻게됩니까? 누구나 아이디어가 있습니까? – FlyingCat

+0

@ Jerry - 수레가 작동하는 방식 일뿐입니다. 정확한 계산이 아닙니다 ... 이것은 부동 소수점 정밀도입니다. 나는 여기에서 농담하지 않고있다, wikipedia는이 화제에 관해보기 흉하지 않은 이해를 얻기위한 최고의 장소 다 : http://en.wikipedia.org/wiki/Floating_point –

+0

ok .. 나는 그것을 조사 할 것이다. .. 다시 한번 감사드립니다. – FlyingCat

-1

자바 스크립트 (좋은 부분)에 대한 Google 테크 비디오를 보았습니다. 그리고 그 사람은 Javascript의 숫자 구현이 좋은 부분이 아니라고 말하고있었습니다. 그것은 정말로 짜증 난다.

내가 아는 한 Java 스크립트에는 숫자 하나만 있습니다. 따라서 정수 또는 부동 소수점 사이에는 차이가 없습니다. 이것이 도움이되기를 바랍니다.

+0

내가 아는 한 .. 자바 스크립트에서는 Int와 float 사이에 차이점이 있습니다. ParseInt 및 ParseFloat는 다른 반환을 제공합니다. 정보를 가져 주셔서 감사합니다. – FlyingCat

+0

@Jerry :'parseInt'와 비트 연산자와 같은 일부 함수와 연산자는 숫자를 정수로 취급하지만 실제 유형은 항상 64 비트 부동입니다. 자바 스크립트 엔진은 내부적으로 정수형을 사용할 수도 있지만 엄격하게 최적화 할 수 있습니다. –