【问题标题】:A more functionrich number (than Bigdecimal) holding java library一个功能更丰富的数字(比 Bigdecimal)包含 java 库
【发布时间】:2011-07-13 10:38:30
【问题描述】:
  • 该操作应尽量保持与原始输入相同类型的答案,因此如果持有者以 Double 开头,则结果也应为 double。

  • 如果输入包含不同数字类型的持有者,那么它应该自动加宽等。

  • 应该有一种带有 getter 的 Holder,以整数、双精度、大十进制、大整数等形式返回结果,如果转换失败则抛出异常。

  • 代码应该类似于 Bigdecimal。

  • 理想情况下是不可变的

  • 代码不应该知道或关心持有人里面的东西,操作只是在以后需要转换之前工作。

  • 不幸的是,BigDecimal 并不能满足我的需要,它缺少许多关键功能,例如:正弦、对数和 Math 上的大多数静态助手。

ApacheCommonsMath

Axelcb 建议使用 apache commons 数学库。就我而言,主要的使用类别似乎是 DFP。

  • 检查 DFP 没有简单的方法可以传递 BigDecimal/BigInteger 并构建 DFP。如果精度也可以作为参数并在吸入过程中使用,那就太好了。

  • 没有任何函数(如乘法)接受具有精度和舍入的上下文,就像 BigDecimal 一样。我真的不明白处理精度和舍入的笨拙方式的原因。

  • 什么是 DfpField,它具体做什么以及为什么 DFP 中有字段?请不要再告诉我这个日历。

  • 没有导出到 BigDecimal 或 BigInteger 的方法

dfp

  • 这是 apache commons math DFP 类的原始灵感吗?

  • 缺乏从 BigDecimal 或 BigInteger 导入的第一个问题。

  • 没有导出到 BigDecimal 或 BigInteger 的方法

【问题讨论】:

  • 这听起来像是一个愿望问题在哪里;-)

标签: java math bigdecimal


【解决方案1】:

您可以尝试kawa language framework 中的包gnu.math,它用于实现完整的Scheme“数字塔”。该软件包应该是相当独立的,并且独立于 kawa 的其余部分。

【讨论】:

  • 授权为 MIT :) 它似乎包含许多我追求的“额外”功能,所以无论如何我都会接受它并继续研究它。
【解决方案2】:

BigDecimal 不是final。您可以对其进行扩展并将方法(正弦、对数等)添加到子类中。

【讨论】:

    【解决方案3】:

    【讨论】:

    • Commons-math DFP 是浮点数,与 BigDecimal 不完全相同。它还缺少许多常见的函数,比如 trig 的东西——就收敛到 java.math.Math 中的东西而言,它对 BigDecimal 的改进并不多。
    • 在 org.apache.commons.math.dfp 包的 DfpMath 类中,你可以找到 trig 的东西。
    • 正如 Dfp 类的 Javadoc 所说:“另一个浮点类。这个类是使用基数 10000 构建的,即 10^4,因此它几乎是十进制(不精确十进制数学,但接近)”。
    • 问题的一半是,虽然 DFP 功能更完善,但几乎就像他们完全忘记了丰富其非浮点等价物:( - 我在谈论更好的 Bigdecimal where :)
    【解决方案4】:

    我认为最好的方法是为 BigDecimal 编写包装器并实现所有其他选项。

    【讨论】:

    • 但这就是我不想在 java.lang.Math 上实现 30-40 个函数而在 BigDecimal 上缺少的一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多