Scala 和 Java BigDecimal

2022-09-01 10:07:27

我想在我的应用中从 Java 切换到基于数学的模块的脚本语言。这是由于 mathy Java 的可读性和功能限制。

例如,在Java中,我有这个:

BigDecimal x = new BigDecimal("1.1");
BigDecimal y = new BigDecimal("1.1");
BigDecimal z = x.multiply(y.exp(new BigDecimal("2"));

如您所见,如果没有 BigDecimal 运算符重载,简单的公式很快就会变得非常复杂。

对于双打,这看起来很好,但我需要精度。

我希望在Scala中我能做到这一点:

var x = 1.1;
var y = 0.1;
print(x + y);

默认情况下,我会得到类似十进制的行为,唉,Scala默认情况下不使用十进制计算。

然后我在Scala中这样做:

var x = BigDecimal(1.1);
var y = BigDecimal(0.1);
println(x + y);

我仍然得到一个不精确的结果。

在Scala中,有没有什么我没有做对的事情?

也许我应该使用Groovy来最大化可读性(默认情况下它使用小数)?


答案 1

我不知道Scala,但是在Java中用一个值初始化,因此它不完全等于1.1。在Java中,您必须改用。也许这也将有助于Scala。new BigDecimal(1.1)BigDecimaldoublenew BigDecimal("1.1")


答案 2

将 Scala 代码更改为:

var x = BigDecimal("1.1");   // note the double quotes
var y = BigDecimal("0.1");
println(x + y);

它将像在Java中一样工作。