[英]Validating Floating Point Precision in Javascript
我正在尝试使用Javascript验证用户输入的有效货币金额(美元和美分),小数点右边不超过两位数。
由于固有的浮点问题,向左移动然后执行模1运算失败:
(parseFloat("19.99") * 100) % 1 // Returns 0.9999999999997726
我知道BigDecimal库,但不确定将其转换为BigDecimal然后进行验证是否正确,因为它可以掩盖无效的输入以及浮点问题。
就目前而言,我的解决方法是针对以下正则表达式测试原始(字符串)输入:
/^\d*((\.\d{0,2})?)$/
这足以保证输入的货币格式有效吗? 如果没有,是否存在基于数学的验证方法?
您的正则表达式还将匹配空输入,这是不正确的。
尝试使用此正则表达式:
^(?=[^.])\d*(?:\.\d{0,2})?$
(?=[^.])
是一个前瞻,它将确保输入中至少有一个非点字符,以避免匹配空字符串。 如果您不需要使用RegExp,请让JS的数学运算繁重:
var n=myInput.value;
if(!n || +(+n || 0).toFixed(2) != +n) {
alert("real numbers only!");
myInput.select();
}
验证例程部分由不良的UX组成,但数学运算可靠且可靠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.