这并不容易,因为您无法确切知道千位的分隔符是什么,小数部分的分隔符是什么
考虑“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