2011-12-01 12 views
2

우리는 J2ME를 사용하여 레거시 프로젝트를 약간 수정했습니다. 지금까지 십진수는 산술 연산이 필요하지 않으므로 String으로 처리되었습니다. 값은 텍스트로만 표시되었습니다.J2ME의 임의 정밀도 소수 대체물

이제 임의 정밀도 산술 연산이 필요합니다. Java SE 인 경우 BigDecimal을 사용하지만 MIDP/CLDC API에는 없습니다.

사용자 정의 DecimalNumber 클래스를 작성하려고했지만 단위 테스트에서 버그를 수정하고 새로운 버그를 발견하는 동안이 클래스를 견고하고 오류없이 만들려면 시간이 필요하다는 것을 깨달았습니다. .

그래서 바퀴를 다시 발명하는 대신 어떤 용도로 다시 사용할 수 있습니까? 예를 들어, BigIntegerBigDecimal 클래스를 J2ME (CLDC1.1)에 포팅 할 수 있습니까? 나는 JavaSE의 BigDecimal을 bouncycastle의 BigInteger으로 이식하려고하는 다른 질문을 읽었습니다. 호환 가능합니까?

도움이 될 것입니다.

답변

1

JavaSE의 BigDecimal을 성공적으로 포팅했습니다. 기본적으로 나는, 일부 제네릭을 제거했다

  • 대등
  • BigInteger를
  • BitSieve
  • MutableBigInteger
  • SignedMutableBigInteger

: 나는 또한 포트에 이러한 다른 클래스를했다 직렬화 방법, 거의 모든 방법이 BigInteger과 관련 있으며, int[].clone()을 비슷한 방법으로 바꿉니다. 또한 compareTo 메소드를 조정합니다.

목표는 임의의 정밀도를 달성하고 String에서 BigDecimal로 변환하는 것이 었습니다. 실제로는 다른 것이 필요하지 않았습니다.

업데이트 : 작동하지 않음 !!! 소스 코드를 검색 할 때 다른 소스 (OpenJDK, Oracle JavaSE 등)의 클래스를 혼합 한 것으로 보입니다. 이것들은 모두 Java 6 용 이었지만 다른 버전 릴리스 사이에 몇 가지 주요 변경 사항을 발견했습니다. 그것들은 상호 운용이 잘 안되고 (또는 그들 중 일부는 심각한 버그를 포함하고 있지만 그렇게 생각하지는 않습니다.) 포트가 큰 실패를 보였습니다. 이 문제를 최대한 빨리 해결하려면 다음과 같은 대안을 찾고 있습니다.

  • Paypal에서 모바일 결제 API를 출시했습니다. BlackBerry 라이브러리에는 BigDecimal 포트가 포함되어 있습니다. OpenSource가 아니며 클래스가 난독 화되었지만 이제는 올바르게 작동한다고 말할 수 있습니다. 3 개의 클래스 파일 만 필요합니다. 나는 그것을 철저히 시험 해보고, Paypal의 물건이 될 것으로 기대한다. (적어도 나는 그렇게 바란다).
  • bouncycastle의 SimpleBigDecimal도 있지만 Paypal 또는 Java만큼 강력하지는 않습니다. 이 클래스에서 제공하지 않는 String 생성자가있는 데 관심이있었습니다.
  • JavaSE v1.4.2를 사용하면 JavaSE의 포트를 더 쉽게 사용할 수 있습니다. 제네릭이 없으므로 개발이 더 빠를 수도 있지만,이 오래된 클래스는 아마도 1에서 새로운 것보다 강력하지 않을 것으로 생각하기 때문에 이것을 위해 꺼려합니다.6 또는 1.7
  • 주어진 스케일 (1 또는 2 자릿수) 및 감소 된 메소드 세트 (기본적으로 비교, 추가 및 빼기)에 대해 자체적으로 축소 된 클래스를 구현할 수 있지만, 보다 신속한 해결 방법이 아닌 일반적인 솔루션입니다.

업데이트 : 드디어 블랙 베리에 대한 자신의 모바일 결제 라이브러리에 포함 된 페이팔의 BigDecimal의 포트를 사용
. BlackBerry는 J2ME을 기반으로하므로 작업에 적합합니다. 상당한 양의 단위 테스트를 만들었으며 JavaSE의 BigDecimal 동작과 일관성이 있다고 말할 수 있습니다.

1

하모니 구현에 걸림돌이 있다고 생각 했습니까 (here 참조)? 불행히도 제네릭 프리가 아니기 때문에 정리가 필요할 것입니다.

+0

제안을 주셔서 감사합니다. 구현에 대해 알지 못했습니다. 그러나, 그것은 공식적인 것만 큼 크다. 그래서 그것은 거의 같은 노력 일 것이다. –