Nosql 为什么Couchbase在json文档中舍入数值?

Nosql 为什么Couchbase在json文档中舍入数值?,nosql,couchbase,Nosql,Couchbase,有没有人注意到Couchbase在记录Json文档时会在一定限度内更改属性的数值 这里有一个例子。对于这个测试,我通过couchbase web界面使用实时输入 属性“inputValue”对应于单击保存按钮之前在属性“ValueAfSave”中输入的值 属性“valueAfterSave”对应于保存后的值 对于一个16位数的数字,这很好: { "inputValue": "1234567890123456", "valueAfterSave": 1234567890123456 }

有没有人注意到Couchbase在记录Json文档时会在一定限度内更改属性的数值

这里有一个例子。对于这个测试,我通过couchbase web界面使用实时输入

属性“inputValue”对应于单击保存按钮之前在属性“ValueAfSave”中输入的值

属性“valueAfterSave”对应于保存后的值

对于一个16位数的数字,这很好:

{
  "inputValue": "1234567890123456",
  "valueAfterSave": 1234567890123456
} 
但从17位开始,系统开始更改值:

{
  "inputValue": "12345678901234567",
  "valueAfterSave": 12345678901234568
}

只是出于好奇,有40个数字

{
  "inputValue": "1234567890123456789012345678901234567890",
  "valueAfterSave": 1.234567890123457e+39
}
这种行为是在某处指定的?有办法改变吗?。 有一个解决方案是通过字符串值​​但我承认我很好奇


我在Windows 7 Pro 32位平台上使用Couchbase Server 2.1.0。

Couhbase的技术传道者Tugdul Grall给了我答案

这是由于JavaScript在显示这些值时的行为造成的​​通过以下NodeJS测试证明:

$ node
> console.log(12345678901234567890)
12345678901234567000
另一方面,JavaAPI返回的值是正确的(在我们的示例中为123456789001234567890)。正是控制台显示了这种差异。 如果通过web管理控制台修改文档,将保存修改后的值

因此,在处理此类数据时,请小心使用管理控制台


拖船谢谢。

您使用的客户是什么?我认为应该由客户端决定如何将JSON编号映射到本机类型。有些使用long,有些可能扩展到特殊类型,比如big decimalsI使用couchbase客户机Java API 1.1.8进行了此测试,还直接输入了值​​通过Couchbase服务器的web界面。
{
  "inputValue": "1234567890123456789012345678901234567890",
  "valueAfterSave": 1.234567890123457e+39
}
$ node
> console.log(12345678901234567890)
12345678901234567000