在我的 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 之前取绝对值,否则应该没问题。