2017-12-04 17 views
0

フォームでレートを計算する際に問題があります。これは、Chromeでもどのように動作するかです:FirefoxのJS:コンマの後に3桁以上

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に私は得る12187500,00 カンマの後に2桁だけで大丈夫だろうが、私は3桁が必要です。 修正方法がわかりません。

おかげ アレックス

+0

Firefoxでこのコードスニペットを実行すると、エラーがないことを承諾する必要があります。だから私のアプリケーションでは効果ですが、何がこの計算に影響しますか? – Rawburner

+0

上記のエラーが表示されない場合でも、実際のアプリケーションで行う場合は、質問を削除し、[mcve]で説明されている手順に従ってエラーをゼロにすることをおすすめします。上記のコードがうまくいけば、問題を解決することはできません。 –

+2

私はあなたのロケールでfirefoxの "数字"入力がクロムに​​違うと思っています...もしそれをタイプ= "テキスト"にすると、少なくとも予想される結果を生み出すようです。私があなたのコードに15,625を入れると、コンソールに1,15、NaN、NaN、NaN、15625が表示されます。 –

答えて

0

正しい答えは、入力フィールドのタイプです。 type = "number"からtype = "text"に変更すると、問題が解決されました。

関連する問題