Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 简单算法_Javascript_Clojurescript - Fatal编程技术网

Javascript 简单算法

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

在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
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位即可实现此目的。除非有更聪明的事情发生,否则我最终会这么做。一个计算将反馈到另一个计算中,并在每次出现问题时立即进行纠正。我希望答案是正确的,而不是给用户的输出是正确的。为了便于调试,我只记录了这个数字。