Firefox中的JS:逗号后超过三位数

时间:2017-12-04 10:08:42

标签: javascript firefox math

我在计算表单中的费率时遇到问题。这就是它在Chrome中运行良好的方式:

$('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="">

当我输入Chrome 15,625(德语方式)时,然后在控制台中我看到了:

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

但是当我在FF中做同样的事情时,我看到了这一点:

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

现在你可以想象,结果是计算错误的Firefox。 Chrome给了我正确答案12187,50,在FF我得到12187500,00 逗号后只有2位数就可以,但我需要第三位数字。 我不知道如何解决。

由于 亚历

1 个答案:

答案 0 :(得分:0)

正确答案是输入字段的类型。改变类型=&#34;数字&#34;输入=&#34; text&#34;解决了这个问题。