簡體   English   中英

PyMongo 對浮點數的錯誤行為

[英]PyMongo misbehaving with floating point numbers

我正在使用 PyMongo 將數據保存到 MongoDB。 以下是我的代碼:

from pymongo import MongoClient
import time


class data2db:
    def __init__(self):
        pass

    def enter_data(self, data):
        client = MongoClient('127.0.0.1', 27017)
        db = client.db
        coll = db.Temperature1
        post = {"auth": data,
                "Time": time.asctime(time.localtime(time.time()))}
        post_ = coll.insert(post)


c = data2db()

c.enter_data(24.3)

但是,當我檢索這個對象時,我得到:

{ "_id" : ObjectId("558019749f43b8c19779c106"), "auth" : -0.000063384, "Time" : "Tue Jun 16 08:41:24 2015" }

當我用整數嘗試相同的代碼時,它工作正常。 我在 RaspberryPi 上使用 MongoDB 2.6.3 和最新版本的 Raspbian 和 python 2.7.3。 我通過以下命令從 Raspbian 存儲庫安裝了 Pymongo:

sudo apt-get install python-pymongo

有人可以幫我嗎?

更新:相同的代碼在使用 Ubuntu 14.04 LTS、mongoDB 3.0.1、python 2.7.3 和 pyMongo 2.8 的英特爾計算機上表現完美,但當涉及到 Raspbian 時,行為發生了變化。 即使在 mongo shell 中,Raspbian 上的浮點插入也是不正常的。 這可能是因為有限的浮點支持或不推薦使用的 mongoDB 版本(最新版本的二進制文件不適用於 ARM)。 無論如何,我將在今天晚些時候用 rpi2 嘗試它並檢查它是否有所作為。

基於此

c.enter_data("24.3")

post = {"auth": data, ... # 沒有在內部進行轉換

您實際上是在插入一個字符串,而不是一個浮點數

您應該能夠使用c.enter_data(24.3)插入浮點數

為了進一步調試,我建議:

  • 嘗試 mongo 命令行客戶端上的命令,以確認浮點行為
  • 當您在 CLI 或 Python 代碼中插入時,獲取插入對象的 ID,以確保您正在查看正確的對象

顯然,插入工作正常,但在查詢時它以錯誤的格式返回對象。 當我從 rpi 插入一個浮點數到遠程數據庫時,它工作得很好。 當在計算機上查詢該對象時,該對象將按原樣顯示:

`{ "_id" : ObjectId("557d828b08139add2323aeaf"), "A" : 12.1 }` 

但是當從 rpi 查詢時,它顯示為:

{ "_id" : ObjectId("557d828b08139add2323aeaf"), "A" : 0.04667261646131403e-60 } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM