2017-12-04 3 views
0

양식의 요율을 계산하는 데 문제가 있습니다. 이것은 크롬에서 잘 작동하는 방법이다 :Firefox의 JS : 쉼표 뒤에 세 자리 이상

val:1 
val:15 
val:15.6 
val:15.62 
val:15.625 

그러나 때 내가 크롬 15625 (독일어 방법)를 입력하고

$('body').on('change, keyup', 'input[data-rate]', function() { 
 
    var val = parseFloat($(this).val().replace(',', '.')); 
 
    window.console.log('val:'+val); 
 
    if (val > 0) { 
 
     var result = val * parseFloat($(this).data('rate')); 
 
     var rate_id = $(this).data('rate-id'); 
 
     $('input[data-ratesum-id=' + rate_id + ']').val(number_format(result, 2, ',', '.')); 
 
    } 
 
}); 
 

 
/** 
 
    * http://locutus.io/php/strings/number_format/ 
 
    * @param number 
 
    * @param decimals 
 
    * @param decPoint 
 
    * @param thousandsSep 
 
    */ 
 
    window.number_format = function (number, decimals, decPoint, thousandsSep) { 
 
     number = (number + '').replace(/[^0-9+\-Ee.]/g, ''); 
 
     var n = !isFinite(+number) ? 0 : +number; 
 
     var prec = !isFinite(+decimals) ? 0 : Math.abs(decimals); 
 
     var sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep; 
 
     var dec = (typeof decPoint === 'undefined') ? '.' : decPoint; 
 
     var s = ''; 
 
     var toFixedFix = function (n, prec) { 
 
      var k = Math.pow(10, prec); 
 
      return '' + (Math.round(n * k)/k) 
 
        .toFixed(prec) 
 
     }; 
 
     // @todo: for IE parseFloat(0.55).toFixed(0) = 0; 
 
     s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); 
 
     if (s[0].length > 3) { 
 
      s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep) 
 
     } 
 
     if ((s[1] || '').length < prec) { 
 
      s[1] = s[1] || ''; 
 
      s[1] += new Array(prec - s[1].length + 1).join('0') 
 
     } 
 
     return s.join(dec); 
 
    };
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
 
<input type="number" name="number[19]" class="form-control" data-rate="780.00" data-rate-id="19"> 
 
<input type="text" name="sum" data-ratesum-id="19" class="form-control" disabled="">

, 다음 콘솔 내가 이것을 참조 저는 FF로 똑같이합니다. 그러면 이것을 볼 수 있습니다 :

val:1 
val:15 
val:15.6 
val:15.62 
val:15625 

이제 당신은 상상할 수 있습니다, 결과는 Firefox에서 잘못 계산 beeing입니다. 크롬은 나에게 옳은 대답을 준다 12187,50 FF 12127500,00 쉼표 뒤에 두 자리 만 있으면 괜찮을 것이지만 세 번째 숫자가 필요하다. 해결 방법을 모르겠습니다.

감사 알렉스

+0

Firefox에서이 코드 스 니펫을 실행하면 오류가 없음을 인정해야합니다. 내 응용 프로그램에서 효과가 있지만이 계산에 어떤 영향을 미칠까요 ?? – Rawburner

+0

위와 같은 오류가 발생하지 않았지만 실제 응용 프로그램에서 수행하는 경우 [mcve]에 설명 된 단계에 따라 질문을 삭제하고 오류를 0으로 설정하는 것이 좋습니다. 위의 코드가 작동하면 문제를 해결하는 데 도움을 줄 수 없습니다. –

+2

firefox "숫자"입력이 로캘에서 Chrome과 다르게 작동한다고 생각합니다. 유형을 "텍스트"로 설정하면 예상 결과가 나온 것 같습니다. 내가 당신 코드에 15,625 개를 넣었을 때 ... 콘솔 쇼 1, 15, NaN, NaN, NaN, 15625 –

답변

0

정답은 입력 필드의 유형입니다. type = "number"에서 type = "text"로 변경하면 문제가 해결되었습니다.

관련 문제