gpt4 book ai didi

math - 如何在 Clojure 中将任何数字转换为 clojure.lang.Ratio 类型?

转载 作者:行者123 更新时间:2023-12-04 14:00:22 24 4
gpt4 key购买 nike

在Scheme中,我可以做到:

#;> (numerator 1/3)
1
#;> (denominator 1/3)
3

在 Clojure 中,我可以做类似的事情:
user=> (numerator 1/3)
1
user=> (denominator 1/3)
3

但在Scheme中我可以做到:
#;> (numerator 0.3)
3.0

这在 Clojure 中是不可能的:
user=> (numerator 0.3)

ClassCastException java.lang.Double cannot be cast to clojure.lang.Ratio clojure.core/numerator (core.clj:3306)

如何将 Double(或实际上任何类型的数字)转换为 clojure.lang.Ratio?

在 Scheme 中,我们还有 inexact->exact Clojure 中的“双倍比率”是什么,但我找不到类似的东西。

最佳答案

哦,我知道这个!

user=> (rationalize 0.3)
3/10
user=> (numerator (rationalize 0.3))
3

但 OP 指出这并不适用于所有数字:
user=> (numerator (rationalize 1))
ClassCastException java.lang.Long cannot be cast to clojure.lang.Ratio clojure.core/numerator (core.clj:3306)

在他的回答中查看他的 Java 互操作解决方法。

[编辑] OP 在这里:

这是一个更通用的解决方案:
user=> (numerator (clojure.lang.Numbers/toRatio (rationalize 1)))
1
user=> (numerator (clojure.lang.Numbers/toRatio (rationalize 0.3)))
3
user=> (numerator (clojure.lang.Numbers/toRatio (rationalize 1/3)))
1

关于math - 如何在 Clojure 中将任何数字转换为 clojure.lang.Ratio 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25194809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com