Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用BigDecimal时Groovy是否可以替代Java?_Java_Scala_Groovy_Evaluation_Bigdecimal - Fatal编程技术网

使用BigDecimal时Groovy是否可以替代Java?

使用BigDecimal时Groovy是否可以替代Java?,java,scala,groovy,evaluation,bigdecimal,Java,Scala,Groovy,Evaluation,Bigdecimal,我刚刚完成了对Java、Groovy和Scala的评估 我考虑的因素是:可读性、精确度 我想知道的因素有:性能、易集成性 我需要一个大的十进制精度 以下是我的结果: Java void someOp() { BigDecimal del_theta_1 = toDec(6); BigDecimal del_theta_2 = toDec(2); BigDecimal del_theta_m = toDec(0); del_theta_m = abs(del_th

我刚刚完成了对Java、Groovy和Scala的评估

我考虑的因素是:可读性、精确度

我想知道的因素有:性能、易集成性

我需要一个大的十进制精度

以下是我的结果:

Java

void someOp()
{
    BigDecimal del_theta_1 = toDec(6);
    BigDecimal del_theta_2 = toDec(2);
    BigDecimal del_theta_m = toDec(0);

    del_theta_m = abs(del_theta_1.subtract(del_theta_2))
      .divide(log(del_theta_1.divide(del_theta_2)));

}
def other(){
 var del_theta_1 = toDec(6);
 var del_theta_2 = toDec(2);
 var del_theta_m = toDec(0);
 del_theta_m = (
  abs(del_theta_1 - del_theta_2)  
  / log(del_theta_1 / del_theta_2)
 )
}
Groovy

void someOp()
{
 def del_theta_1 = 6.0
 def del_theta_2 = 2.0
 def del_theta_m = 0.0

 del_theta_m = Math.abs(del_theta_1 - del_theta_2) / Math.log(del_theta_1 / del_theta_2);
}
Scala

void someOp()
{
    BigDecimal del_theta_1 = toDec(6);
    BigDecimal del_theta_2 = toDec(2);
    BigDecimal del_theta_m = toDec(0);

    del_theta_m = abs(del_theta_1.subtract(del_theta_2))
      .divide(log(del_theta_1.divide(del_theta_2)));

}
def other(){
 var del_theta_1 = toDec(6);
 var del_theta_2 = toDec(2);
 var del_theta_m = toDec(0);
 del_theta_m = (
  abs(del_theta_1 - del_theta_2)  
  / log(del_theta_1 / del_theta_2)
 )
}
注意,在Java和Scala中,我使用了静态导入

Java: 优点:它是Java
缺点:没有运算符重载(lots o方法),几乎不可读/可编码

Groovy: 优点:默认的BigDecimal意味着没有可见的键入,最不令人惊讶的是对所有操作(包括除法)的BigDecimal支持
缺点:学习另一种语言

Scala: 优点:对BigDecimal有运算符重载

缺点:除法的一些令人惊讶的行为(用小数128固定),另一种要学习的语言

如果你的代码的主要核心是大量的大十进制数学,Java在我看来就是不合适的语言。你需要操作符重载

我希望Java的未来版本将允许对内置数字类型进行系统定义的运算符重载,以使此类用例可用


因为所有这些语言都是在JVM上运行的,所以您当然可以用正确的语言完成高级数学运算,并将Java用于其他一切。这将最小化“学习另一种语言”的方面。

BigDecimal的核心在每种语言中都是相同的。如果性能的限制因素是BigDecimal中的数学运算,那么这三种语言之间将没有区别,因为它们都使用java.math.BigDecimal


因此,使用最容易阅读和理解的语言(可能不是java)。

尽管标题末尾有问号,但这似乎不是一个问题。@Chris Dail。你是对的,这里似乎没有什么问题。如果你不期望任何特定的精度,你怎么能对除法不感到惊讶呢?从数学上讲,我不知道我应该期望什么。在groovy中也可以进行静态导入。+1,我不知道它们在幕后都是一样的