在groovy中添加double

在groovy中添加double,groovy,Groovy,我定义了两个双精度: double abc1 = 0.0001; double abc2 = 0.0001; 现在如果我打印它们: println "Abc1 "+abc1; println "Abc2 "+abc2; 它返回: Abc1 1.0E-4 Abc2 1.0E-4 Abc3 1.0E-41.0E-4 如果我加上: println "Abc3 "+abc1+abc2; 它返回: Abc1 1.0E-4 Abc2 1.0E-4 Abc3 1.0E-41.0E-4 而不是

我定义了两个双精度:

double abc1 = 0.0001;
double abc2 = 0.0001;
现在如果我打印它们:

println "Abc1 "+abc1;
println "Abc2 "+abc2;
它返回:

Abc1 1.0E-4

Abc2 1.0E-4
Abc3 1.0E-41.0E-4
如果我加上:

println "Abc3 "+abc1+abc2;
它返回:

Abc1 1.0E-4

Abc2 1.0E-4
Abc3 1.0E-41.0E-4
而不是:

Abc3 2.0E-4

为什么会发生这种情况?

这是因为加法运算符从左向右工作,并且从字符串开始,因此加法运算符在您的情况下充当串联运算符


这:

println "Abc3 "+abc1+abc2;
将按如下步骤逐步完成:

  • println“Abc3”+abc1+abc2
  • println“Abc3 1.0E-4”+abc2
  • println“Abc3 1.0E-41.0E-4”

  • 解决方案 如果您希望得到预期的结果,请按如下方式操作:

    println "Abc3 " + (abc1 + abc2);
    

    在这里,您将在浓缩之前对添加的进行优先级排序

    方法不起作用的原因是加法操作从左到右。您可以这样做:

    println "answer "+(double)(abc1+abc2);
    

    学习接受好的答案。在groovy中,编写“string”+var+“string”+var也是一种反模式。使用“abc${abc1+abc2}”或“abc${abc1}${abc2}”减少惊喜