Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Python Mongodb缺少精度递增浮动_Python_Mongodb_Floating Accuracy - Fatal编程技术网

Python Mongodb缺少精度递增浮动

Python Mongodb缺少精度递增浮动,python,mongodb,floating-accuracy,Python,Mongodb,Floating Accuracy,我有一个问题,因为Mongodb在递增浮动时似乎无法保持精度。例如,以下内容应产生2.0: from decimal import Decimal # for python precision for i in range(40): db.test.update({}, {'$inc': {'count': float(Decimal(1) / 20)}}, upsert=True) print db.test.find_one()['count'] 2.000000000000001

我有一个问题,因为Mongodb在递增浮动时似乎无法保持精度。例如,以下内容应产生
2.0

from decimal import Decimal  # for python precision
for i in range(40):
    db.test.update({}, {'$inc': {'count': float(Decimal(1) / 20)}}, upsert=True)
print db.test.find_one()['count']
2.000000000000001
我怎样才能避开这个问题呢?

不幸的是,你不能——至少不能直接这么做。Mongo将浮点数存储为双精度IEEE浮点(),这些舍入错误是格式固有的

我注意到您在代码中使用了小数——它们在被发送到DB之前被转换为Python浮点(双倍)。如果您想保持真正的十进制精度,就必须将数字存储为字符串小数,这意味着您还必须放弃Mongo的数字处理功能,如
$inc

不幸的是,在大多数数据库和编程语言中,这是一种权衡:IEEE浮点数是CPU本机处理的格式,任何偏离它们的尝试(使用任意精度的小数,如
decimal.decimal
)都会带来巨大的性能和可用性损失。

不幸的是,你不能,至少不能直接。Mongo将浮点数存储为双精度IEEE浮点(),这些舍入错误是格式固有的

我注意到您在代码中使用了小数——它们在被发送到DB之前被转换为Python浮点(双倍)。如果您想保持真正的十进制精度,就必须将数字存储为字符串小数,这意味着您还必须放弃Mongo的数字处理功能,如
$inc

不幸的是,在大多数数据库和编程语言中,这是一种权衡:IEEE浮点数是CPU本机处理的格式,任何偏离它们的尝试(使用任意精度的小数,如
decimal.decimal
)都会带来巨大的性能和可用性损失。

不幸的是,你不能,至少不能直接。Mongo将浮点数存储为双精度IEEE浮点(),这些舍入错误是格式固有的

我注意到您在代码中使用了小数——它们在被发送到DB之前被转换为Python浮点(双倍)。如果您想保持真正的十进制精度,就必须将数字存储为字符串小数,这意味着您还必须放弃Mongo的数字处理功能,如
$inc

不幸的是,在大多数数据库和编程语言中,这是一种权衡:IEEE浮点数是CPU本机处理的格式,任何偏离它们的尝试(使用任意精度的小数,如
decimal.decimal
)都会带来巨大的性能和可用性损失。

不幸的是,你不能,至少不能直接。Mongo将浮点数存储为双精度IEEE浮点(),这些舍入错误是格式固有的

我注意到您在代码中使用了小数——它们在被发送到DB之前被转换为Python浮点(双倍)。如果您想保持真正的十进制精度,就必须将数字存储为字符串小数,这意味着您还必须放弃Mongo的数字处理功能,如
$inc


不幸的是,在大多数数据库和编程语言中,这是一个需要权衡的问题:IEEE浮点数是CPU本机处理的格式,任何偏离它们的尝试(使用任意精度的小数,如
decimal.decimal
)性能和可用性都会受到很大的损失。

可能是因为修正了客户端代码的精度。毕竟,首先提供价值的是零件。因此,请理解是您造成了问题,而不是接口。“键盘-椅子”接口问题。可能是通过修正客户端代码的精度。毕竟,首先提供价值的是零件。因此,请理解是您造成了问题,而不是接口。“键盘-椅子”接口问题。可能是通过修正客户端代码的精度。毕竟,首先提供价值的是零件。因此,请理解是您造成了问题,而不是接口。“键盘-椅子”接口问题。可能是通过修正客户端代码的精度。毕竟,首先提供价值的是零件。因此,请理解是您造成了问题,而不是接口。“键盘-椅子”界面问题。