使用BigDecimal时Groovy是否可以替代Java?
我刚刚完成了对Java、Groovy和Scala的评估 我考虑的因素是:可读性、精确度 我想知道的因素有:性能、易集成性 我需要一个大的十进制精度 以下是我的结果: 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
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,我不知道它们在幕后都是一样的