在我的 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

P.S. num - 是标准 long (java.lang.Long) 值,部分 - 大于 0 且小于或等于 9 (1..9)。

但是这段代码只能在 groovy 类中正常工作。

java 类中,我得到了以下结果:
endsWith(7, 7) == true
endsWith(23, 3) == false
endsWith(23, 1) == true

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

P.S.2 我将使用 groovyc javac 编译此代码以比较结果。因为如果我没有犯任何错误,它可能是 groovyc 中的一个错误。但这是我的错误,我希望:)

最佳答案

你为什么要使用浮点运算?为什么不只是:

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

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

10-06 11:24