首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中有没有类似Scheme的“精确除法”的东西?

在Java中有没有类似Scheme的“精确除法”的东西?
EN

Stack Overflow用户
提问于 2013-07-13 18:32:13
回答 3查看 350关注 0票数 1

在方案中,我可以这样做:

代码语言:javascript
运行
复制
#;> (/ 1 3)
1/3
#;> (exact->inexact (/ 1 3))
0.3333333333333333

这被称为“精确除法”。

我在使用Java语言中的BigDecimal时发现,您可以使用its .divide() function来进行精确的划分,但是如果划分不精确,此函数将抛出ArithmeticException。您可以使用其他类似的函数来指定如何舍入,但如果我不想舍入(相当于方案exact->inexact函数)。

使用纯Java可以吗?或者是图书馆?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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编写数学代码可能非常乏味。通常,您必须以文本形式输入数学表达式,并希望库以或多或少的透明方式使用其自己的类对表达式进行建模,否则您将不得不对对象使用addmult等方法...

如果您在Java环境中有很多数学运算要做,那么研究在JVM上运行的其他语言提供了什么可能是值得的,比如Jython或Scala

票数 1
EN

Stack Overflow用户

发布于 2013-07-14 05:05:32

Clojure有理数:

代码语言:javascript
运行
复制
%> clojure
Clojure 1.0.0-
user=> (/ 1 3)
1/3

无论您是否认为用Clojure创建应用程序是个好主意,您始终可以用Clojure实现数学运算,甚至可以最大限度地使用Cojure宏,以便具有更强的表达能力并编译脚本。一个命名空间就是一个类,很容易在Java类中导入和使用。另一种方式是最常见的,因为如果没有Java类库,Clojure几乎什么都不是。它们以两种方式混合和匹配。

票数 2
EN

Stack Overflow用户

发布于 2013-07-13 18:35:52

有一个库可以做到这一点,是的:apfloat,更准确地说,是它的Aprational class。另请参见AprationalMath

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17629327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档