На самом деле это не вопрос, так как у меня есть работа с этой проблемой, но я подумал, что сообщу всем, потому что это может иметь довольно большое влияние на то, как люди работают с Google Web Toolkit.
Итак, одна из проблем заключается в том, как Google gson представляет числа в JSON. Например, int myInt = 2
станет "myInt":2
, long myLong = 5432198765L
станет "myLong":5432198765
, а BigInteger myBI = 1310381093810938109481049128409487109378109248104098130981039810983
станет "myBI":1310381093810938109481049128409487109378109248104098130981039810983
. Хотя сам gson может десериализовать это без проблем, фреймворку AutoBeans в GWT 2.4 в JSON это не понравится. Исправление ошибки 6331. это для длительного представления в предстоящем выпуске GWT 2.5. Однако проблема 7555 не будет разрешено из-за того, как работает точность чисел Javascript.
Таким образом, нам нужно будет представить BigInteger как строки, и это будет работать, например, String myBIStr = new BigInteger("1310381093810938109481049128409487109378109248104098130981039810983").toString()
будет представлен как "myBIStr":"1310381093810938109481049128409487109378109248104098130981039810983"
. В конце GWT это приведет к String, и нам придется построить из нее BigInteger.
Все имеет смысл, почему Google не разрешает 7555, но это подводит меня к настоящему открытому вопросу: как работать с числами высокой точности в Javascript?
В общем, если веб-интерфейсы Javascript и Google Web Toolkit бросают вызов собственным интерфейсам, тогда могут возникнуть ситуации, когда мы работаем с числами произвольной точности, вместо того, чтобы ограничиваться примерно 53-битной точностью, которая комментарий 3 беседы о. Что еще хуже, разве это ограничение не влияет на node.js или любой другой Javascript на стороне сервера?
Есть ли хороший способ обхода, особенно тот, который использует или без проблем работает с Google Web Toolkit?