Javascript 简单算法
在Clojurescript中,我正在做一个减号——从一个数字中减去另一个:Javascript 简单算法,javascript,clojurescript,Javascript,Clojurescript,在Clojurescript中,我正在做一个减号——从一个数字中减去另一个: (let [external-take-central (- external-val central-y) _ (log "Ans: " external-take-central " from " external-val " take " central-y) 由此产生的输出可能涉及大量不必要的小数位: Ans: 0.10000000000000142 from 21.1 take 21 rati
(let [external-take-central (- external-val central-y)
_ (log "Ans: " external-take-central " from " external-val " take " central-y)
由此产生的输出可能涉及大量不必要的小数位:
Ans: 0.10000000000000142 from 21.1 take 21
rationalize
在Clojurescript上不存在,也不存在BigDecimal
在Javascript执行环境中,明智地处理这些浮点算术错误的最佳方法是什么
在这种情况下,我希望
external-take-central
本身不会稍微大于/小于0.1。我想找到一种通用方法,使计算准确且易于推理。这取决于您希望如何使用该值。您可以使用可用的javascript库和函数。一般来说,在考虑加载一个单独的库之前,我不会先查看google闭包库,因为这样可以避免定义外部函数等问题
一个可能的解决方案是使用google.string库,即
(ns ....
(:require [google.string :as gstr]))
(gstr/format "%.2f" value)
或者类似的方法可以将您的值格式化为只有2位小数的字符串
编辑:根据评论添加更多信息并澄清一些要点
请注意,Clojurescript数字只是javascript数字,可以在任何接受数字的javascript函数中使用。例如,你可以
(.round js/Math 3.00001)
甚至
(.toFixed 3.0002 2)
或者更复杂的东西,取决于你的需求。在每个计算步骤中,我都会小心舍入/截断。在某些情况下,这可能是有意义的(例如,您可能希望将货币计算限制在小数点后2位),但在其他CAE中,这样做只会增加舍入误差。对于像使用货币delaing这样的东西,我倾向于使用clojurescript或为此目的编写的javascript库 经过一般的计算方法。始终将每次计算的结果四舍五入到小数点后10位即可实现此目的。除非有更聪明的事情发生,否则我最终会这么做。一个计算将反馈到另一个计算中,并在每次出现问题时立即进行纠正。我希望答案是正确的,而不是给用户的输出是正确的。为了便于调试,我只记录了这个数字。