這不是一個真正的問題,因爲我確實有解決這個問題的方法,但我想我會讓每個人都知道,因爲它可能會對人們的方式產生相當廣泛的影響使用Google Web Toolkit。任意精度數字和Javascript,Google Web Toolkit
所以問題之一是Google gson代表JSON中的數字。例如,int myInt = 2
將變爲"myInt":2
而long myLong = 5432198765L
將變爲"myLong":5432198765
,並且BigInteger myBI = 1310381093810938109481049128409487109378109248104098130981039810983
將變成"myBI":1310381093810938109481049128409487109378109248104098130981039810983
。儘管gson本身可以反序列化這個,但JSON中的GWT 2.4中的AutoBeans框架並不喜歡它。 Issue 6331修復了它在即將發佈的GWT 2.5版本中的長時間表示。但是,由於JavaScript數字精度的工作方式,issue 7555將不會被解決。
因此,我們需要將BigIntegers表示爲字符串,它將起作用,例如,String myBIStr = new BigInteger("1310381093810938109481049128409487109378109248104098130981039810983").toString()
將表示爲"myBIStr":"1310381093810938109481049128409487109378109248104098130981039810983"
。在GWT結束時,這將產生一個String,我們將不得不從它構建一個BigInteger。
這一切都非常有道理,爲什麼谷歌不會解決7555,但這導致我一個真正的開放性問題:如何處理Javascript中的高精度數字?一般來說,如果基於Web的Javascript和Google Web Toolkit前端要挑戰本地前端,那麼可能會出現我們使用任意精確數字的情況,而不是受到53位精確度comment 3談到。更糟的是,這個限制是否也影響了node.js或其他服務器端Javascript?
有沒有很好的解決方法,特別是使用Google Web Toolkit或無縫工作的工具?
但是,我試圖在一個密碼系統的實現中使用BigIntegers,但它失敗了。但是,對於標準Java,同樣的實現工作正常。 – xtremebytes 2012-08-03 13:44:52
「失敗」,我的意思是:例如,它停在密鑰生成階段。它只花了很長時間來計算大質數,最終Javascript停止了響應。事實上,即使使用128位公鑰密碼系統,也失敗了。我注意到GWT支持BigInteger,所以我認爲我可以和他們合作,但我不能。 – xtremebytes 2012-08-03 13:49:58
這是一個不適合JavaScript的任務。它失敗了,因爲它處理大量數據的速度非常慢,而且您在大量大量數據上進行了大量操作。 – 2012-08-03 16:08:40