一个价格效验引出的血案

测试是很牛逼的,某天写了一个判断

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 检查一下

image

果然是,换成乘法也应该是会错误的

image

至于为什么会出现精度丢失这个就属于计算机基础知识了,就不多说了

果断把算法换了

正在表达式还是最靠谱的,附上一个更强的正则(包括效验长度,大小,限制数字)

/^[1-9]d{0,7}$|^0.d{1,2}$|^[1-9]d{0,7}.d{1,2}$/

  1. 还没有评论

  1. 还没有引用通告。