Похоже, что xs:decimal
деление возвращает неверные результаты.Это чрезвычайно большое число, поэтому я предполагаю, что оно является результатом какого-то переполнения.
Каждое из следующих выражений дает значение xs:decimal
322122382.272474584
в более поздних версиях MarkLogic, вместо этого3221225472
, который возвращается в более ранних версиях.
3298534883328 div 1024 ,
xs:integer(3298534883328) div 1024,
xs:decimal(3298534883328) div 1024,
xs:long(3298534883328) div 1024
В качестве обходного пути вы можете принудительно рассчитать ожидаемое значение, явно оценив число левой или правой руки как xs:double
или xs:float
с помощью fn: number () , xs:numeric()
, xs:double()
или xs:float()
.
Каждый из следующихвозвращает ожидаемый ответ 3072
:
fn:number(3298534883328) div 1024 div 1024 div 1024,
xs:numeric(3298534883328) div 1024 div 1024 div 1024,
xs:double(3298534883328) div 1024 div 1024 div 1024,
xs:float(3298534883328) div 1024 div 1024 div 1024,
3298534883328 div fn:number(1024) div 1024 div 1024,
3298534883328 div xs:numeric(1024) div 1024 div 1024,
3298534883328 div xs:double(1024) div 1024 div 1024,
3298534883328 div xs:float(1024) div 1024 div 1024