在javascript中格式化数字,而不会改变

时间:2016-05-03 12:20:10

标签: javascript jquery regex

我正在寻找一个jQuery插件或正则表达式解决方案来格式化JavaScript中的数字,而不需要更改,舍入或添加零。一个数字进入,并根据三个规则返回格式:   - 数千个分隔符   - 小数位数   - 所需的分隔符

以下是我正在寻找的一些例子:

Thousands: Comma, Decimals: 0, Separator: Point
Input: 1000 » Output: 1,000
Input: 100000 » Output: 100,000

Thousands: Space, Decimals: 2, Separator: Comma
Input: 1000 » Output: 10,00
Input: 100000 » Output: 1 000,00

Thousands: Comma, Decimals: 1, Separator: Point
Input: 1000 » Output: 100.0
Input: 100000 » Output: 10,000.0

2 个答案:

答案 0 :(得分:2)

尝试此功能:

function format(prop) {
    prop.input = String(prop.input);
    var input = prop.input, decimals = '';
    if (prop.decimals) {
        input = prop.input.slice(0, -prop.decimals);
        decimals = prop.separator + prop.input.slice(-prop.decimals);
    }
    return input.replace(/(?!^)(?=(...)+$)/g, prop.thousands) + decimals;
}

示例:

format({
    input: 100000,
    thousands: ' ',
    decimals: 2,
    separator: ','
});
// "1 000,00"

答案 1 :(得分:0)

我为你做了一个快速的功能。

function lindqvistFormat(input, thouSep, decimals, decSep) {
    var inStr = (input * (input < 0 ? -1 : 1)).toFixed(0);
    while(inStr.length < decimals + 1) inStr = "0" + inStr;
    var leftPart = inStr.substr(0, inStr.length - decimals), rightPart = decimals ? decSep + inStr.substr(-decimals) : "";
    return (input < 0 ? "-" : "") + leftPart.replace(/(?!^)(?=(...)+$)/g, thouSep) + rightPart;
}

示例:lindqvistFormat(-1234567890, " ", 2, ".")将导致-12 345 678.90

它还处理数字少于请求的小数位数的值,依此类推。

我知道它的工作原理并不是很容易解释,它使用了一些快捷方式,但是它有效,而且我现在没有太多时间来解释如何。无论如何我决定发布它,因为事实上它确实为你的问题提供了解决方案。

编辑:用户6188402的正则表达式实际上比我的解决方案更聪明,并且不需要我拥有的extLeftPart,因此我将我的解决方案改为与他的工作类似。因此,正则表达式部分的积分转到user6188402。 (我的旧解决方案是使用虚拟字符填充extLeftPart以使长度可分为3,然后使用Array.prototype.join(extLeftPart.match(/.{3}/g), thouSep)然后在结尾处再次删除填充。)