Marklogic 10中的最大十进制精度是多少,以及如何在我的json文档中使用?

问题描述 投票:1回答:1

我正在尝试插入带有十进制精度超过10的十进制属性的JSON文档,但是它会自动将舍入到9,当我得到该文档时,它仅显示9十进制精度。

declareUpdate(); 
var uri = '/test.json'; 
var root = { id: 1, value: 56900.123456789012345678901 }; 
xdmp.documentInsert(uri, root);

是否有任何想法在MarkLogic中插入/获取超过9个十进制精度?

marklogic marklogic-9
1个回答
0
投票
在JSON中,数字是双精度的。

https://tools.ietf.org/html/rfc7159

由于实现IEEE 754-2008 binary64的软件(双精度)数字[IEEE754]普遍可用并广泛使用通过使用以下实现,可以实现良好的互操作性在这个意义上,期望的精度或范围不会超过这些提供的精度或范围该实现将在预期精度。 JSON编号,例如1E400或3.141592653589793238462643383279可能表明潜在的互操作性问题,因为它表明该软件创建它希望接收软件具有更大的功能数量级和精度方面的优势远远超过了现有的]。

因此,您最多可以获取17位有效数字。

https://en.wikipedia.org/wiki/Double-precision_floating-point_format

53位有效位数精度为15到17十进制数字精度(2-53≈1.11×10-16)。如果是十进制字符串最多15个有效数字的位数转换为IEEE 754双精度表示形式,然后转换回十进制具有相同位数的字符串,最终结果应匹配原始字符串。如果IEEE 754双精度数是转换为至少包含17个有效数字的十进制字符串,并且然后转换回双精度表示形式,最后结果必须与原始数字匹配。[1]

如果在浏览器控制台中执行以下操作,您将获得相同的结果:

56900.123456789012345678901 + 0

返回

56900.12345678901

如果将小数点向右移动,则相同的有效数字位数:

5690012345678901.2345678901 + 0

产量:

5690012345678901

您可以将值存储为字符串,以保留完整精度,但是如果转换为任何受支持的数字类型,则可能会丢失它。

您需要那种精度水平?

© www.soinside.com 2019 - 2024. All rights reserved.