时髦的数学有什么问题?

Den*_* S. 1 math groovy object

这对我来说似乎很奇怪,完全让我站在愿意使用普通java的人的一边.在编写基于groovy的应用程序时,我遇到了这样的事情:

int filesDaily1 = (item.filesDaily ==~ /^[0-9]+$/) ?
            Integer.parseInt(item.filesDaily) : item.filesDaily.substring(0, item.filesDaily.indexOf('.'))

        def filesDaily = (item.filesDaily ==~ /^[0-9]+$/) ?
            Integer.parseInt(item.filesDaily) : item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
Run Code Online (Sandbox Code Playgroud)

因此,知道item.filesDaily是一个值为'1 ..*'的String,怎么可能,filesDaily1等于49而filesDaily等于1?

更重要的是,在尝试做类似的事情时

int numOfExpectedEntries = filesDaily * item.daysToCheck
Run Code Online (Sandbox Code Playgroud)

抛出一个例外

Cannot cast object '111' with class 'java.lang.String' to class 'int'
Run Code Online (Sandbox Code Playgroud)

用乘法指向那条确切的代码行.怎么会发生这种情况?

Jon*_*eet 5

您将此值分配给int:

item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
Run Code Online (Sandbox Code Playgroud)

我猜 Groovy正在将单字符串"1"转换为char'1',然后在正常的char-to-int转换中获取Unicode值...所以最终得到值49.

如果要将字符串解析为十进制数,请使用Integer.parseInt而不是内置转换.

filesDaily1和之间的区别在于filesDaily你告诉Groovy这filesDaily1是一个int,所以它正在应用转换为int.我怀疑filesDaily在你的测试用例中实际上是字符串"1".

我怀疑你真的只想将代码更改为:

String text = (item.filesDaily ==~ /^[0-9]+$/) ? items.filesDaily :
                   item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
Integer filesDaily = text.toInteger()
Run Code Online (Sandbox Code Playgroud)