在方案中,我可以这样做:
#;> (/ 1 3)
1/3
#;> (exact->inexact (/ 1 3))
0.3333333333333333
这被称为“精确除法”。
我在使用Java语言中的BigDecimal
时发现,您可以使用its .divide()
function来进行精确的划分,但是如果划分不精确,此函数将抛出ArithmeticException
。您可以使用其他类似的函数来指定如何舍入,但如果我不想舍入(相当于方案exact->inexact
函数)。
使用纯Java可以吗?或者是图书馆?
发布于 2013-07-13 19:12:22
如果你想把像1/3
这样的东西直接当作Java代码来处理,在Java语言中总会以这样或那样的方式进行计算,并像对待原始数值类型一样对待(例如double
,这取决于您使用的类型)。
如果您希望将1/3
作为分数,则需要有一个库将其建模为分数。从本质上讲,您看到的是一个能够在Java中进行符号数学运算的工具。你可能不需要一个非常强大的函数(例如,你可能不需要一些能够区分的东西),但它至少需要能够表示分数,并可能对它们进行一些基本的操作和简化(我猜这就是你想要的)。
应该对Apache Commons Maths (Fractions section)感兴趣。您可能还会对本问题中引用的一些库感兴趣:https://stackoverflow.com/q/2574949/372643
不幸的是,Java不允许操作符重载,因此用Java编写数学代码可能非常乏味。通常,您必须以文本形式输入数学表达式,并希望库以或多或少的透明方式使用其自己的类对表达式进行建模,否则您将不得不对对象使用add
、mult
等方法...
如果您在Java环境中有很多数学运算要做,那么研究在JVM上运行的其他语言提供了什么可能是值得的,比如Jython或Scala。
发布于 2013-07-14 05:05:32
Clojure有理数:
%> clojure
Clojure 1.0.0-
user=> (/ 1 3)
1/3
无论您是否认为用Clojure创建应用程序是个好主意,您始终可以用Clojure实现数学运算,甚至可以最大限度地使用Cojure宏,以便具有更强的表达能力并编译脚本。一个命名空间就是一个类,很容易在Java类中导入和使用。另一种方式是最常见的,因为如果没有Java类库,Clojure几乎什么都不是。它们以两种方式混合和匹配。
发布于 2013-07-13 18:35:52
有一个库可以做到这一点,是的:apfloat,更准确地说,是它的Aprational
class。另请参见AprationalMath
。
https://stackoverflow.com/questions/17629327
复制相似问题