我正在寻找一个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
答案 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)
然后在结尾处再次删除填充。)