繁体   English   中英

验证Javascript中的浮点精度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM