这并不容易,因为您无法确切知道千位的分隔符是什么,小数部分的分隔符是什么
考虑“12.000.000”是它12000.000 === 12000
还是12000000
?
但是,如果您将要求最后一个定界符始终是十进制定界符 - 这意味着如果至少给出一个定界符,最后一个定界符必须是十进制定界符,*如果后面的数字不超过定义的长度。
然后你可以尝试以下
编辑
(如果您对旧功能感兴趣,请参阅revs )
我添加了在最后一个分隔符“,”或“。”之后定义最大数字长度的功能。直到它被视为浮点数,之后它作为整数返回
var amounts = ["12000","12.000,00", "12,000.00", "12,000,01", "12.000.02", "12,000,001"];
formatMoney.maxDecLength = 3; //Set to Infinity o.s. to disable it
function formatMoney(a) {
var nums = a.split(/[,\.]/);
var ret = [nums.slice(0, nums.length - 1).join("")];
if (nums.length < 2) return +nums[0];
ret.push(nums[nums.length - 1]);
return +(ret.join(nums[nums.length - 1].length < formatMoney.maxDecLength ? "." : ""));
}
for ( var i=0,j;j=amounts[i];i++)
console.log (j + " -> " +formatMoney(j));
给出输出:
"12000 -> 12000"
"12.000,00 -> 12000"
"12,000.00 -> 12000"
"12,000,01 -> 12000.01"
"12.000.02 -> 12000.02"
"12,000,001 -> 12000001" //as you can see after the last "," there are 3 digits and its treated as integer
另一个 JSBin