javascript中数字类型最多只支持16位长度,超过的部分会变成0或进一变成0。
如下代码:
var a = 12345678998765432112;
alert(a);
运行结果如下:
解决以上问题的最简单的方法就是把数字类型转成字符串类型表示。
但是,如果我们是通过ajax从服务端请求的数据怎么办呢?
按如下方式,把ajax返回的数据类型改为“text”,这样返回的数据就是字符串形式的,再利用正则表达式,把数字全部加上引号,再转换成json对象即可。
$.post(sign.url,sign.param,function(result){
result = JSON.parse(result.replace(/(\"\w+\":)(\d+)([,}])/g,"$1\"$2\"$3"));
doSomething();
},'text');
示例代码如下:
var result = '"result":{"id":123456789123456789,"name":"alan","anotherNumber":987654321987654321}';
result = result.replace(/(\"\w+\":)(\d+)([,}])/g,"$1\"$2\"$3");
alert(result);
运行结果为:
可以看到数字都加上了引号变成了字符串,完美解决了数字溢出的问题。
另外,人民币的格式化也可以使用正则表达式处理哦,如下附上代码:
result = result.replace(/(\"(?:startingPrice|originalPrice|buyNowPrice|bidPrice)\":)([\d\.]*)([,}])/g,function($0,$1,$2,$3){
return $1 + "\"" + moneyFormat($2,2) + "\"" + $3;
});
其中,replace的第二个参数为function,此function的参数为:$0为整个匹配项,$1为第一个捕获组,$2为第二个捕获组(即捕获到的money数值),$3为第三个捕获组。
moneyFormat代码如下:
var moneyFormat=function(s, n)
{
n = n > 0 && n <= 20 ? n : 2;
s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1];
t = "";
for(i = 0; i < l.length; i ++ )
{
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
return t.split("").reverse().join("") + "." + r;
} ;
以上就是正则表达式解决数字类型和money格式化的方法,欢迎指正,谢谢。
关于正则表达式的使用可以参考以下文章:
http://www.cnblogs.com/Bruce_H21/archive/2008/02/21/1076420.html
欢迎关注我的公众号“彤哥读源码”,查看更多“源码&架构&算法”系列文章, 与彤哥一起畅游源码的海洋。