請問有人解決過mongo裡的浮點型的精度問題麼?

時間 2021-05-31 20:56:01

1樓:張友東

MongoDB 3.4 版本裡引入了 Decimal 型別,可以解決浮點數精度的問題。參考官方文件 Model Monetary Data

2樓:

MongoDB 的浮點只儲存為 Double 型別,所以如果是 float 進去的話會丟精度。

在 C# 裡,可以將需要進資料庫的東西全部用 double 型別表示,在進資料庫之前用 decimal 搭橋做兩次強轉【double d = (double)(decimal)numberFloat;】可以在一定程度上(比如處理精度只有最多3~4位的財務資料)避免進入資料庫的資料丟失精度。不過 MongoDB 的 C# 驅動在反序列化的時候其實是會對精度進行修正的(精度修正其實是 C# 做的,MongoDB 的驅動並沒有做什麼特別的處理),保證了 float 存進去是多少取出來還是多少,所以除非你喜歡用各種客戶端肉眼觀察 MongoDB 裡的資料,不然的話其實是用不著這樣強轉的。

如果是算錢的話,某本指導書(Manning | MongoDB in Action)裡面建議把貨幣數值乘以 100(或其他進製)然後以整數形式儲存,相應的貨幣單位向下退兩級(或相應的位數),比如【RMB元】儲存成【分】,然後自己在業務邏輯裡完成處理。

好訊息是,就在前幾天 mongodb 正式完成了對 decimal128 的支援([SERVER-1393] Support decimal numbers),第乙個實裝的版本是 dev 分支的 3.3.8,等 3.

4 吧,應該沒多久了。

2016.11.26 v3.4 正式已經 release 了,並且乙個月後(2016.12.20)就已經 3.4.1 了。

補充一點,C# 的 decimal 型別和 MongoDB 支援的 decimal128 是【不同】的兩種資料格式!

C# 的 decimal:

MongoDB 支援的 decimal128:

3樓:luikore

如果不是算錢的, 顯示的時候按照業務的精度要求四捨五入/截斷就可以了.

如果是算錢的, 有兩種解決方法:

- 一般教材都會告訴你用 Decimal/BigDecimal 型別處理

- 對於瘸腿語言 js, 按照分存成整數最簡單 (有些貨幣乾脆就不給角和分, 例如日元的設計就挺好寫程式的)

不過, 用 mongodb 處理交易的問題... 請自己保重... 一不留神就會被併發更新誆走很多錢...

4樓:Color

在資料庫儲存浮點數型別,精度一定不可靠,這個是硬體決定的,和個人水平無關。

解決辦法是儲存字串型別或者 Decimal型別(如果支援的話) 。

5樓:

不只是mongo,大部分的資料庫都存在這個問題,各種合計都會有誤差,為此有乙個資料型別叫Decimal,使用文字存放數字,資料庫合計之類的就沒有誤差了。當然程式中也要有這個資料型別,然後操作各種蛋痛各種不直觀。

替代的方案是直接用int,以分為單位而不是以元為單位。當然前台顯示時要各種處理,反正就沒乙個簡潔的方案。

6樓:貘吃饃香

瀉藥 ……可偶不會 mongodb 啊……只能湊合起鬨說:

IEEE 754 精度問題 64位雙精度型別就只能這樣了。

(其實就64位里符號位1位,指數部11位,然後是52位小數部,可是2進製無法精確表示小數的呢,所以就有 52 位也無法確保某小數部精度,轉成10進製顯示就這樣了)

看這計算架勢也就小數點後兩位?難道是金錢計算?精度到分?

那用 (100+755.66).toFixed(2) 不行麼……

7樓:蘇洋

之前DBA組的童鞋分享的乙個理念,我蠻認同的:指令碼和資料庫各司其職。

業務交給指令碼來;儲存交給資料庫來。

所以計算這樣的事情,交給資料庫明顯不合適。

解決方法不妨搜尋你使用的『"語言" IEEE / "語言" 浮點數』參考過來人解決方案。

(一般來說,我們會小數點右移2位或3位來解決這個問題)

8樓:賀師俊

這是浮點數機制決定的。所有系統的浮點數只要是按IEEE浮點數標準來的,都是這個樣子。少數語言在顯示的時候做了處理,比如PHP。其他平台就需要自己處理下。

請問這樣的公式在之前有人發現過嗎?

葉小胖 這就是拋物線與該直線共軛的直徑,必定平分所有與其平行的直線在拋物線上所截的弦,且一定過拋物線平行於該弦的切線的切點。古希臘的阿波羅尼烏斯早就發現這個規律了,而且是用純幾何推理證明的。 執悲今厄 沒有人正式提出過,你是第乙個。但它沒被人提出的原因,不是因為沒人發現過,而是因為發現者們都覺得這只...

請問你是否經歷過這樣的產品流程,如何解決的?

莎莎 1.開發團隊的leader很重要,要有自己決斷力,不能唯老闆的意見左右,要能引導老闆跟著開發的思路走 2.寧願在需求和設計階段花足夠多的時間評審,評審,再評審,也不能再開發測試階段再去修改 3.乙個不懂技術還指點江山的老闆,若還不尊重開發團隊,那只有換老闆了 小公尺渣lee 話說我看見這圖,笑...

有人報過求職鴨的衝刺計畫嗎?請問怎麼樣啊

求職機構又不是什麼靈丹妙藥,一針見效的。我覺得一家求職機構的服務裡,最有幫助的東西應該是,導師陪伴你走過整個求職過程,直到你拿下合適的offer為止。就像朋友摯友 大哥哥一樣,以導師自身專業的行業經驗和教學經驗,通過一對一的課程學習,做針對性的職業規劃 求職輔導,盡可能地提高自己的求職技巧,然後衝刺...