从Groovy迁移到Java

在我的grails项目中,我将所有计算都移到 java类中.

Here is the link to source code (i’ve saved it in Google Docs).

主要目的是将当前时间格式化为字符串(两种语言).例子:

1 day 2 hours 3 seconds
1 день 2 часа 3 секунды

我有一个方法

private static boolean endsWith(final long num,final long part) {
    if (num / 10 < 1) {
      return num == part;
    } else {
      float val1 = (num - part) / 10;
      float val2 = (float) Math.floor(val1);

      return val1 == val2;
    }
  }

它检查’num’是否以’part’结尾.
例子:

assert endsWith(128,1) == false
assert endsWith(1,1) == true
assert endsWith(34,4) == true

附: num – 是标准long(java.lang.Long)值,part是大于0且小于或等于9(1..9).

但是这个代码只在groovy类中工作正常.

java类中,我得到了这些结果:

endsWith(7,7) == true
endsWith(23,3) == false
endsWith(23,1) == true

正如我从gant日志中看到的 – 所有代码都是由groovyc编译的.

P.2.2我用groovyc和javac编译这段代码来比较结果.因为如果我没有犯任何错误,那可能是groovyc中的一个错误.但这是我的错误,我希望:)

解决方法

为什么要使用浮点运算?为什么不呢:

private static boolean endsWith(final long num,final long part) {
  return (num % 10) == part;
}

?如果它需要为负数工作,你需要在mod之前取绝对值,否则应该没问题.

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...