xdmp:eval针对不同的ML版本返回不同的结果

时间:2019-01-21 19:31:19

标签: xquery marklogic

在ML 9.0-8版本中,表达式xdmp:eval("(3298534883328) div 1024 div 1024 div 1024 ")返回0。 但是,在ML 9.0-7中,相同的表达式返回3072。

类似地,在ML 9.0-8版本中,表达式xdmp:eval("(3298534883328) div 1024 ")返回322122382,但在ML 9.0-7版本中,相同表达式返回3221225472

为什么不同版本的3072有区别?

1 个答案:

答案 0 :(得分:1)

看来$query = DB::select(" SELECT * (SELECT friendid as friends from tfriends WHERE nameid = $id) FROM tname"); var_dump($query); 除法返回的结果不正确。这是一个非常大的数字,所以我想这是某种溢出的结果。

以下每个表达式在MarkLogic的更高版本中产生xs:decimalxs:decimal,而不是在早期版本中返回的322122382.272474584

3221225472

作为一种解决方法,您可以通过使用fn:number(),将{左手或右手数字显式评估为3298534883328 div 1024 , xs:integer(3298534883328) div 1024, xs:decimal(3298534883328) div 1024, xs:long(3298534883328) div 1024 xs:double来强迫期望值,{ {3}},xs:floatxs:double()

以下各项均返回预期的答案xs:float()

3072