欢迎!请查看关于页面,了解更多关于这一功能的信息。
针对负数的解决方案会生成令人烦恼的浮点数行为(https://dev.clojure.org/jira/browse/CLJS-417)
(mod 2.1 3) ; => 2.0999999999999996
Clojure和标准的JavaScript modulo在这里都返回预期的2.1。
两种可能的解决方案
评论由:dnolen
欢迎提交补丁。
评论由:zto
补丁将cljs.core/mod重命名为double-mod,并在两个参数有相同符号时直接调用js-mod来重新定义mod。它包括了对先前失败的用例的测试案例,但我还对其针对Clojure实现进行了更彻底的测试: https://gist.github.com/aw7/a32bd69923c65bddc23fd63ee062833c
非常感谢,你已经提交了Clojure CA了吗?
是的,两小时前。
评论者:anmonteiro
注意:难道不应该将 double-mod 函数标记为私有吗?
double-mod
我认为大概 double-mod 成为一个独立的函数完全没有必要,我在补丁中将其内联到 mod 中了。
mod
评论者:mfikes
糟糕... 补丁中的某些东西破坏了我们用 Travis 运行的旧版 JavaScriptCore。我唯一的猜测是额外的 mod 测试可能触发了 CLJS-910,但这似乎不太可能。