2012-08-03 1 views
1

문제와 관련하여 문제가있는 것은 아니지만 사람들에게 알리는 방법은 사람들에게 알리는 방법이 많기 때문입니다. Google Web Toolkit에서 작업하십시오.임의의 정밀도 숫자와 자바 스크립트, Google Web Toolkit

그래서 문제 중 하나는 Google gson이 JSON의 숫자를 나타내는 것입니다. 예를 들어 int myInt = 2"myInt":2이되고 long myLong = 5432198765L"myLong":5432198765이되고 BigInteger myBI = 1310381093810938109481049128409487109378109248104098130981039810983"myBI":1310381093810938109481049128409487109378109248104098130981039810983이됩니다. gson 자체가 문제없이이를 deserialize 할 수 있지만 JSON의 GWT 2.4에 포함 된 AutoBeans 프레임 워크는이를 좋아하지 않습니다. Issue 6331은 다가오는 GWT 2.5 릴리스에서 긴 표현으로 수정되었습니다. 그러나 issue 7555은 Javascript 숫자 정밀도가 작동하는 방식 때문에 해결되지 않습니다.

따라서 BigInteger를 String으로 나타내야합니다. 예를 들어 String myBIStr = new BigInteger("1310381093810938109481049128409487109378109248104098130981039810983").toString()"myBIStr":"1310381093810938109481049128409487109378109248104098130981039810983"으로 표시됩니다. GWT가 끝나면 문자열이 생기고 BigInteger를 만들어야합니다.

Google이 7555를 해결하지 않는 이유는 모두 이해가되지만 실제 질문을하게됩니다. 자바에서 고정 소수점 숫자는 어떻게 처리합니까?

일반적으로 웹 기반 Javascript 및 Google Web Toolkit 프런트 엔드가 네이티브 프런트 엔드에 도전한다면 일반적으로 53 비트로 제한되는 대신 임의의 정밀도 숫자로 작업하는 상황이 발생할 수 있습니다 정확도는 comment 3입니다. 더 나쁜 것은이 제한이 node.js 나 다른 서버 측 자바 스크립트에도 영향을 미치지 않는다는 것입니다.

Google Web Toolkit을 사용하거나 원활하게 작동시키는 멋진 방법이 있습니까?

답변

3

GWT는 Long (그리고 BigInteger 내 생각)을 에뮬레이션하므로 53 비트보다 넓은 정수에서 수학을 수행 할 수 있습니다. 수학은 JS 연산을 사용할 수 없기 때문에 속도가 느리지 만 엄격한 제한은 없습니다.

그래서 GWT는 이미 해결 방법을 구현했으며 내장되어 있습니다. 큰 정수가 필요할 때 숫자 JSON을 전달하지 않아도됩니다.

+0

그러나 암호화 시스템을 구현할 때 BigIntegers를 사용하려고했지만 실패했습니다. 동일한 구현은 표준 Java에서 잘 작동합니다. – xtremebytes

+0

"실패"로 말하면, 예를 들어, 키 생성 단계에서 중단되었습니다. 방금 큰 소수를 계산하는 데 시간이 오래 걸렸고 결국 자바 스크립트가 응답을 멈췄습니다. 사실, 128 비트 공개 키 암호 시스템을 사용해도 실패했습니다. BigInteger가 GWT에 의해 지원된다는 것을 알았 기 때문에 나는 그들과 함께 일할 수 있다고 생각했지만 할 수 없었다. – xtremebytes

+1

그건 자바 스크립트에 대해 부적절한 작업입니다. 그것은 큰 숫자로 작업하는 것이 매우 느리기 때문에 실패하고 많은 수의 많은 작업을 수행하고 있습니다. –