Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 什么';groovy数学有什么问题?_Math_Object_Groovy - Fatal编程技术网

Math 什么';groovy数学有什么问题?

Math 什么';groovy数学有什么问题?,math,object,groovy,Math,Object,Groovy,这对我来说似乎很奇怪,完全让我站在愿意使用纯java的人一边。在编写基于groovy的应用程序时,我遇到了这样的情况: int filesDaily1 = (item.filesDaily ==~ /^[0-9]+$/) ? Integer.parseInt(item.filesDaily) : item.filesDaily.substring(0, item.filesDaily.indexOf('.')) def filesDaily = (ite

这对我来说似乎很奇怪,完全让我站在愿意使用纯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('.'))
那么,知道item.filesDaily是一个值为“1..*”的字符串怎么可能是filesDaily1等于49,filesDaily等于1

更重要的是,当你尝试做一些

int numOfExpectedEntries = filesDaily * item.daysToCheck
抛出一个异常,表示

Cannot cast object '111' with class 'java.lang.String' to class 'int'

用乘法指向精确的代码行。这是怎么发生的?

您正在将此值赋给int:

item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
我猜Groovy正在将单个字符串“1”转换为字符“1”,然后在正常的字符到整数转换中使用Unicode值。。。所以你得到的值是49

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

filedaily1
filedaily
之间的区别在于,您已经告诉Groovy
filedaily1
是一个int,因此它正在对int进行转换。我怀疑
filedaily
实际上是测试用例中的字符串“1”

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

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

您正在将此值指定给int:

item.filesDaily.substring(0, item.filesDaily.indexOf('.'))
我猜Groovy正在将单个字符串“1”转换为字符“1”,然后在正常的字符到整数转换中使用Unicode值。。。所以你得到的值是49

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

filedaily1
filedaily
之间的区别在于,您已经告诉Groovy
filedaily1
是一个int,因此它正在对int进行转换。我怀疑
filedaily
实际上是测试用例中的字符串“1”

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

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

这是groovy类型转换代码中的一个错误

int a = '1'
int b = '11'
返回不同的结果,因为使用了不同的转换器。在本例中,
a
将为49,而
b
将为11。为什么?

单字符到整数的转换(使用
String.charAt(0)
)的优先级高于整数解析器

坏消息是,所有单字符串都会发生这种情况。您甚至可以执行
inta='a'
,这将为您提供65


只要您无法知道字符串的长度,就必须使用
Integer.parseInt()
而不是依赖自动类型转换。

这是groovy类型转换代码中的一个错误

int a = '1'
int b = '11'
返回不同的结果,因为使用了不同的转换器。在本例中,
a
将为49,而
b
将为11。为什么?

单字符到整数的转换(使用
String.charAt(0)
)的优先级高于整数解析器

坏消息是,所有单字符串都会发生这种情况。您甚至可以执行
inta='a'
,这将为您提供65


只要您无法知道字符串的长度,就必须使用
Integer.parseInt()
,而不是依赖自动类型转换。

+1这显然是Groovy 2.0中要删除的内容之一,因为它令人困惑。。。单字符字符串通过
char
转换为
int
。。。多字符字符串抛出异常EAH。。。在发帖几秒钟后就注意到了。尽管异常消息仍然含糊不清。@den,但您认为可以将三元表达式更改为
int filesDaily1=Integer.parseInt((item.filesDaily=~/^([0-9]+).$/)[0][1])
,这可能更简单一些。。。或否;-)@tim_yates,真的很不错,可能没有那么可读,但很酷+1它显然是Groovy 2.0中要删除的东西之一,因为它令人困惑。。。单字符字符串通过
char
转换为
int
。。。多字符字符串抛出异常EAH。。。在发帖几秒钟后就注意到了。尽管异常消息仍然含糊不清。@den,但您认为可以将三元表达式更改为
int filesDaily1=Integer.parseInt((item.filesDaily=~/^([0-9]+).$/)[0][1])
,这可能更简单一些。。。或否;-)@tim_yates,真的很不错,可能没有那么可读,但很酷!我不认为这是一个bug,这是一个令人惊讶的特性;-)我不认为这是一个bug,这是一个令人惊讶的特性;-)