Java BigDecimal 替代库

3

这可能听起来特别奇怪,但我必须使用GCJ编译几个新代码;而它不支持Java的BigDecimal。

我正在寻找java.math.BigDecimal的替代方案。

有人能指点我正确的方向吗?

谢谢!


1
GCJ是什么?如果它不支持标准Java API的某些部分,您如何确信它会支持您的新库? - Nikita Rybak
你确定gcj不支持标准Java API的某些部分吗?这听起来更像是一个库问题,而不是gcj的问题。 - Vivin Paliath
1
@Nikita GCJ是Java的GNU编译器 - http://gcc.gnu.org/java/ - 它实际上很麻烦,我真的不知道它是否支持新库,但如果它完全封装(新库)并且仅使用Java 1.4语法,我可能会安全。 - Frankie
@Peter,实际上是的,在询问之前我尝试过那个。所有的都爆炸了!:) Vivin的答案非常好! - Frankie
1
从许可证的角度来看,将代码从Apache Harmony中取出可能更好。 - Tom Hawtin - tackline
显示剩余4条评论
1个回答

3
看起来 gcj 正在针对 JDK 1.4.2 进行编译,而该版本仅提供 setScale(int scale, int roundingMode)setScale(int scale) 两种方法。
您正在尝试编译的代码似乎是为 JDK 1.5.0 及以上版本编写的。在 JDK 1.5.0 中,除了其他两种方法外,还可以使用 setScale(int newScale, RoundingMode roundingMode) 方法。
您可以查看是否有更新的 gcj 版本可用于使用 1.5。从 gcj 网站 上看,我没有看到这种情况。它说当前版本“支持大多数 1.4 库以及一些 1.5 添加功能”。
你的另一个选择是重写代码,以便将对 setScale(int newScale, RoundingMode roundingMode) 的调用替换为 setScale(int scale, int roundingMode)。在 1.5.0 中,不再使用 BigDecimal 中的静态整数指定 roundingMode 的整数值,而是使用 RoundingMode 枚举类来指定它(旧方法仍然保留以实现向后兼容)。
因此,在您的代码中,您将使用 BigDecimal.ROUND_CEILING 而不是 RoundingMode.CEILING

Vivin,运行得非常完美。需要做一些更改,但效果很棒。谢谢! - Frankie
@Frankie 没问题。请原谅我最初的怀疑。我很少使用gcj,所以不知道它是如此麻烦! - Vivin Paliath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接