使用逗号的Javascript数字格式

时间:2013-06-03 18:00:09

标签: javascript jquery

我正在尝试格式化数字,因此每三个数字之间都有逗号。然而,它非常小故障,一旦达到8个数字就无法工作。我已将所有代码放在下面的jsfiddle中:

function commaSeparateNumber(val){
    val = val.replace(',', '');
    var array = val.split('');
    var index = -3;
    while (array.length + index > 0) {
        array.splice(index, 0, ',');
        // Decrement by 4 since we just added another unit to the array.
        index -= 4;
    }
    return array.join('');
};    

$(document).on('keyup', '.test', function() {
    var value = $(this).val();
    value = commaSeparateNumber(value);
    $(this).val(value);
});

http://jsfiddle.net/R8JrF/

感谢任何帮助!

5 个答案:

答案 0 :(得分:25)

即兴创作评论中的答案。您需要的是以下代码。看看这个,还有小提琴:

$(document).on('keyup', '.test', function() {
    var x = $(this).val();
    $(this).val(x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
});

小提琴:http://jsfiddle.net/praveenscience/R8JrF/1/

它不起作用的原因是,一旦你进行了更改,你需要删除所有的逗号,并再次进行格式化,这在OP的代码和其他答案代码中都没有。

答案 1 :(得分:9)

使用Number.prototype.toLocaleString(); check here

var no = 3456;
no.toLocaleString(); 

提供3,456

答案 2 :(得分:5)

你的问题是当你到达第8位时,中间结果中已经有两个逗号。然而,

val = val.replace(',', '');

只替换第一个。您需要提供一个带有global标志的正则表达式:

val = val.replace(/,/g, '');

Updated, working fiddle

答案 3 :(得分:1)

改为尝试Intl.NumberFormat

var number = 1000000;

console.log(new Intl.NumberFormat().format(number));
// 1,000,000

您的问题的解决方案:https://jsfiddle.net/mf2s48jo/

答案 4 :(得分:0)

我知道,这是一个老问题。但是,即使文本变长或变短,我也希望将光标保持在数字内的相同位置,具体取决于要添加或删除的逗号数。最后,这就是我所使用的。现在,如果将光标放在输入字段中的任何位置并进行更改,它将不会将光标移动到数字的末尾或在数字内跳来跳去。

jQuery(document).on('keyup', '.number-format', function(_e) {
    var _x = jQuery(this).val();
    var _cursor = _e.target.selectionStart;
    
    var _length = _x.toString().replace(/,/g, "").length;
    var _commas = _x.length - _length;
    
    jQuery(this).val(_x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
    
    var _newLength = _x.toString().replace(/,/g, "").length;
    var _newCommas = jQuery(this).val().length - _newLength - _commas;
    
    if (_newLength == _length && _newCommas == 0) {
        _e.target.setSelectionRange(_cursor, _cursor);
    }else{
        _e.target.setSelectionRange(_cursor - (_newLength - _length) + _newCommas, _cursor - (_newLength - _length) + _newCommas);
    }
});
相关问题