一个价格效验引出的血案
测试是很牛逼的,某天写了一个判断
function testPrice(val){
return Math.floor(val/0.01) == val/0.01;
}
就是这么一个小东西,目的是限制价格位数只能为2位
如果
val = 2.123;
那么testPrice就返回false了
看起来逻辑完全没有问题,
但是测试的一个数字:2.22
testPrice(2.22) == false!!
一阵迷茫这后很快发现问题了~
可能是计算机储存数据丢失精度了~
firebug 检查一下
果然是,换成乘法也应该是会错误的
至于为什么会出现精度丢失这个就属于计算机基础知识了,就不多说了
果断把算法换了
正在表达式还是最靠谱的,附上一个更强的正则(包括效验长度,大小,限制数字)
/^[1-9]d{0,7}$|^0.d{1,2}$|^[1-9]d{0,7}.d{1,2}$/
还没有评论