将clojure中的任何数字转换为浮点数

时间:2015-01-05 17:53:00

标签: clojure numbers

所以我有这个问题:我正在使用向量中的每个元素进行计算。根据向量中的数字,结果向量可能包含有理数,浮点数,科学浮点数,大整数,整数。我需要将它们全部转换为浮点数或舍入整数。生成的文本是一个SVG,将发送给客户端,这些数字是路径的一部分。我可以用内置的东西来做,还是应该自己动手?

格式问题是它是java Formatter类的一个瘦包装器。这意味着由于clojure有自己的实现,因此不会处理大的int。

另一方面,cl格式(实际上应该是主要选择)格式化除了有理数之外的一切 - 4/5转换为4 / 5.0。也许我在使用cl-format做错了。

我尝试将整个向量(无论如何都需要)的类型暗示为双精度,但结果仍然以有理数的形式返回。

如果我遗失了某些内容,请提供帮助。

1 个答案:

答案 0 :(得分:6)

转换数据类型不是格式化程序的工作,在将数据交给格式化程序之前,应确保数据具有要打印的类型。

类型提示不是类型转换或强制,它是编译器关于在运行时最有可能进入的args的提示。

您想要的功能是double

user=> (double 42)
42.0
user=> (map double [1.0 1 1.1M 2/3])
(1.0 1.0 1.1 0.6666666666666667)

另外,如果你是键入提示整个向量,你不应该使用向量,你应该使用double-array。矢量不受其内容类型的任何影响。