最近項(xiàng)目中用到了圖數(shù)據(jù)庫(kù)邑彪,最終選擇的是OrientDB.
OrientDB本身提供了一個(gè)WEB 的操作界面,總體來說骤宣,挺好用的...
但是昨天遇到一個(gè)問題秦爆,折騰了好久。不過憔披,最后問題還是找到了等限。
先看一個(gè)錄屏吧,看能不能發(fā)現(xiàn)問題所在....
yk: 1847092548766533637L
在UserList中添加一條記錄芬膝,字段 id (long) 插入 1847092548766533639望门,?
點(diǎn)擊SAVE(保存),發(fā)現(xiàn)立即變成了 1847092548766533600
通過查詢語句可以查到結(jié)果:
select * from `UserList` where id = 1847092548766533600
通過 1847092548766533639 進(jìn)行檢索锰霜,查不到結(jié)果:
select * from `UserList` where id = 1847092548766533639
通過 1847092548766533600 進(jìn)行刪除怒允,可以成功刪除:
delete from `UserList` where id = 1847092548766533600
后來,反復(fù)確認(rèn)和排查锈遥,發(fā)現(xiàn)是JavaScript 數(shù)據(jù)精度的問題。
對(duì)于大于 2的53次方(9007199254740991)的整數(shù)(long), 數(shù)據(jù)會(huì)溢出勘畔,丟失精度所灸。
>>> 2**53-1
9007199254740991
>>> len('9007199254740991')
16
對(duì)此的解決方案有:
1. 降低字段id的精度,字段id的最大精度為長(zhǎng)度為15的整數(shù)炫七;
2.WEB后端(Python后端)和WEB前端數(shù)據(jù)交互的時(shí)候爬立,使用字符串(string)來傳遞。在后端万哪,涉及數(shù)據(jù)庫(kù)操作的時(shí)候侠驯,再造型為整數(shù)。
擴(kuò)展閱讀
[JavaScript數(shù)字精度丟失問題總結(jié)](http://www.cnblogs.com/snandy/p/4943138.html)
http://www.cnblogs.com/snandy/p/4943138.html
簡(jiǎn)介:
對(duì)于整數(shù)奕巍,前端出現(xiàn)問題的幾率可能比較低吟策,畢竟很少有業(yè)務(wù)需要需要用到超大整數(shù),只要運(yùn)算結(jié)果不超過 Math.pow(2, 53) 就不會(huì)丟失精度的止。
對(duì)于小數(shù)檩坚,前端出現(xiàn)問題的幾率還是很多的,尤其在一些電商網(wǎng)站涉及到金額等數(shù)據(jù)诅福。解決方式:把小數(shù)放到位整數(shù)(乘倍數(shù))匾委,再縮小回原來倍數(shù)(除倍數(shù))
javascript 精度問題導(dǎo)致后端傳過來的值顯示不正確,有何好的解決辦法氓润?
https://www.zhihu.com/question/34564427?sort=created
http://www.iteye.com/news/28410
[4 個(gè)用于執(zhí)行高級(jí)數(shù)學(xué)計(jì)算的 JavaScript 庫(kù)](http://www.iteye.com/news/28410)
簡(jiǎn)介:
在使用JavaScript執(zhí)行數(shù)學(xué)方面的任務(wù)時(shí)赂乐,往往要用到浮點(diǎn)運(yùn)算,且需要精確到某位小數(shù)咖气,這就容易造成錯(cuò)誤挨措,而且會(huì)相當(dāng)費(fèi)時(shí)挖滤。因此,如果你需要做一些高精度的數(shù)學(xué)計(jì)算的編程工作运嗜,比如財(cái)務(wù)或科學(xué)計(jì)算壶辜,那么你一定需考慮使用下面的這些庫(kù)。
numbers.js
Numeric Javascript
Tangle
accounting.js
用 javascript 做科學(xué)計(jì)算的最佳的方案是什么担租?
https://www.zhihu.com/question/40585948?sort=created
簡(jiǎn)介:
題主提到了Python砸民,就默認(rèn)題主會(huì)Python好了。我建議用ipython notebook奋救。安裝Anaconda就可以用它了岭参。它可以讓你在瀏覽器上運(yùn)行和展示Python。
js不適合做科學(xué)計(jì)算尝艘,科學(xué)計(jì)算應(yīng)該放在后臺(tái)演侯,用java,c++等語言實(shí)現(xiàn),然后將計(jì)算后的結(jié)果通過js傳遞到前臺(tái)的web界面。js是弱類型語言背亥,用瀏覽器做計(jì)算那不太操蛋了嗎