2013-05-23 3 views
0

내 스크립트는 제품의 가중치를 계산합니다. 전체 상자 무게 25.2KG. 각 항목 4.2KG 6 항목 전체 상자 만들기 무게.자바 모듈러스 연산 결과가 잘못됨

상자에 Javascript로 chekcing하고 있습니다. 이 동작을 설명 할 수 whou

25.2 % 25.2 = 0 
50.4 % 25.2 = 0 
75.6 % 25.2 = 25.199999999999996 (WHY?) 
100.8 % 25.2 = 0 
126 % 25.2 = 3.552713678800501e-15 (WHY?) 

사람 : 스크립트의 상단에서

alert(jsonData.total_weight + ' % ' + fullpackweight + ' = ' + jsonData.total_weight % fullpackweight); 
if(jsonData.total_weight % fullpackweight == 0) { 
    $('#fill_status').hide(); 
    $('#fill_status i').html('OK ' + jsonData.total_weight); 
} else { 
    $('#fill_status').show(); 
    $('#fill_status i').html('NOT OK ' + jsonData.total_weight); 
} 

경고 상자는 다음과 같은 결과를 얻을 수?

+3

http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken 그리고 [무엇 각을 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 사항] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – C5H8NNaO4

+0

이러한 값의 크기를 조절하고 모듈로 값을 다시 내림으로써 – C5H8NNaO4

+0

tl ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; \=================== Dr. 수레는 근본적으로 정확하지 않습니다. –

답변

0

문제는 모듈 대신 정수 대신 float를 사용한다는 것입니다.

756 % 252 = 0 

75.6 % 25.2 = 25.199999999999996 

하지만

그래서 문제를 해결할 것입니다 (* 10 사용) 정수로 conversis.

확인이

25.199999999999999 - 25.2 

그것은 당신에게 0 줄 것이다 : D

+0

실제로. 맘에 들었어. 첫 번째 값을 반올 렀기 때문에 100을 곱한 값과 반올림 한 값을 제외하면 7559.99999가되었습니다. 무게를 그램 단위로 측정하는 것이 더 좋습니다 :) – Grzegorz

+0

10을 곱한 값이 항상 정수로 변환되는지 확실하지 않습니다. 왜 그럴까? –

+0

자바 스크립트 typeof 25.2와 typeof 252는 모두 숫자이므로 정수 또는 부동 소수점 형이 C#이나 Java처럼 없습니다. – tkeram

관련 문제