【发布时间】:2014-05-01 17:03:38
【问题描述】:
我正在尝试使用 Javascript 来验证用户输入是否是有效的货币(美元和美分)金额,小数点右侧不超过两位数。
由于固有的浮点问题,左移,然后执行模 1 失败:
(parseFloat("19.99") * 100) % 1 // Returns 0.9999999999997726
我知道 BigDecimal 库,但我不确定转换为 BigDecimal 然后进行验证是否是正确的方法,因为它可能会掩盖无效输入以及浮点问题。
就目前而言,我的解决方法是针对以下正则表达式测试原始(字符串)输入:
/^\d*((\.\d{0,2})?)$/
这足以保证输入是货币格式的有效浮点数吗?如果没有,是否有基于数学的方法来进行验证?
【问题讨论】:
-
是否允许
.7和7.? -
是的,“7”、“7.7”和“0.7”也是如此
-
(+(n).toFixed(2) == +n)
-
丹,你介意把它作为一个正式的答案,以便我标记它吗?
标签: javascript regex validation floating-point