source

Java에서의 통화 가치 표시

lovecheck 2023. 1. 2. 22:42
반응형

Java에서의 통화 가치 표시

Big Decimal이 Java에서 화폐 가치를 나타내기 위해 권장되는 베스트 프랙티스인 것으로 알고 있습니다.뭘 쓰는데?대신 사용하고 싶은 더 좋은 도서관이 있나요?

BigDecimal로는 어떤 은 자기만의 Cash ★★★★★★★★★★★★★★★★★」Money 「현금가치」가 되어 .BigDecimal, 아마 반올림하고 있을 거예요

편집: Don이 답변에서 언급했듯이 시간과 과 같은 오픈 소스 프로젝트가 있습니다.개발자가 시간을 낭비하는 것을 막으려고 하는 것은 칭찬합니다만, 저는 프리알파 라이브러리를 실전 환경에서 사용할 자신이 없습니다.게다가, 후드 밑을 파헤쳐 보면, 그들이 사용하는 것을 알 수 있을 거예요.

JodaMoney: http://www.joda.org/joda-money/에 대해 알아두면 검색엔진을 통해 이곳에 도착하는 사람들에게 유용할 수 있다.

여기서 내 의견을 말하는 것은 아니지만, 누군가가 버려야 한다는 Big Decimal에 대한 꽤 좋은 주장들이 있다.

http://lemnik.wordpress.com/2011/03/25/bigdecimal-and-your-money/

아까 만난 편리한 도서관은 조다머니 도서관입니다.그 실장 중 하나는 실제로 Big Decimal에 근거하고 있습니다.통화에 대한 ISO-4217 사양을 기반으로 하며 맞춤형 통화 목록(CVS를 통해 로드)을 지원할 수 있습니다.

이 라이브러리에는 수정이 필요한 경우 신속하게 처리할 수 있는 소수의 파일이 있습니다.Joda-Money는 Apache 2.0 라이선스로 발행됩니다.

만약 당신이 단지 달러와 센트를 사용한다면, 저는 롱(소수점 2자리 오프셋)을 사용하겠습니다.더 자세한 정보가 필요한 경우 큰 소수점을 사용하는 것이 좋습니다.

어느 쪽이든 올바른 형식을 사용하는 .toString()으로 클래스를 확장하고 다른 메서드를 사용할 수 있도록 합니다(소수가 조정되지 않으면 오랫동안 곱셈과 나눗셈이 잘못됩니다).

또, 독자적인 클래스 및 인터페이스의 정의를 사용하는 경우는, 실장을 자유롭게 치환할 수 있습니다.

BigDecimal또 다른 고정점 표현은 일반적으로 돈에 필요한 것이다.

부동 소수점(Double,Float)의 표현과 계산이 부정확하여 잘못된 결과를 초래합니다.

당신은 시간과 돈을 다룰 때 매우 조심해야 해요.

돈벌이를 할 때는 플로트나 더블을 사용하지 않도록 모두가 알아주셨으면 합니다.

하지만 나는 Big Decimal에 대해 확신이 없다.

대부분의 경우 센트를 조금만 더 길게 추적하면 괜찮을 것이다.이렇게 하면 소수점 이하를 절대 다루지 않을 거예요.

당신은 그것을 인쇄할 때만 달러를 표시합니다.항상 정수를 사용하여 내부에 센트로 작업합니다.Math.abs()를 분할하거나 사용해야 하는 경우 이 작업은 까다로울 수 있습니다.

하지만, 당신은 0.5센트, 심지어 100분의 1센트까지도 신경 쓸 수 있습니다.어떻게 하면 좋을지 모르겠어요.1000분의 1센트를 처리하고 길게 사용하면 될 수도 있습니다.아니면 Big Decimal을 사용해야 할 수도 있습니다.

저는 이것에 대해 더 많이 읽고 싶지만, 돈을 나타내기 위해 플로트나 더블을 사용하는 것에 대해 이야기하기 시작하는 모든 사람들은 무시하세요.그들은 단지 문제를 일으키고 있다.

제 조언이 불충분하다고 생각되니 좀 더 넣어주세요.당신은 위험한 타입을 상대하고 있어요!

Money 클래스를 만드는 것이 좋은 방법입니다.아래에 BigDecimal(또는 int)을 사용합니다.그런 다음 통화 클래스를 사용하여 반올림 규칙을 정의합니다.

불행히도 연산자가 Java를 오버로드하지 않으면 이러한 기본 유형을 만드는 것이 매우 불쾌합니다.

더 나은 도서관과 시간과 돈이 있다.IMO는 이 두 가지 개념을 표현하기 위해 JDK에서 제공하는 라이브러리보다 훨씬 우수합니다.

Big Decimal은 절대 아닙니다.반올림이나 프레젠테이션에는 신경 써야 할 특별한 규칙이 너무 많다.

Martin Fowler는 통화금액을 나타내는 전용 머니클래스를 도입할 것을 권장합니다.또, 통화환산 룰도 실시합니다.

여기 BigDecimal에 대한 매우 흥미로운 기사가 있습니다. 그리고 왜 BigDecimal이 2배 대신 사용되는지에 대한 실례가 있습니다.Big Decimal 튜토리얼

최종적으로 통화값을 표시할 때 DecimalFormat 클래스를 사용할 수 있습니다.현지화를 지원하며 확장성이 매우 뛰어납니다.

위에서 언급한 것처럼 통화도 있는 Money 클래스에 BigDecimal을 캡슐화합니다.중요한 것은 특히 다른 통화로 작업하는 경우 극단적인 양의 단위 테스트를 수행하는 것입니다.또한 다음과 같이 테스트를 작성할 수 있도록 문자열을 사용하는 편리한 생성자 또는 동일한 작업을 수행하는 공장 메서드를 추가하는 것도 좋습니다.

   assertEquals(Money.create("100.0 USD").add("10 GBP"),Money.create("116 USD"));

항상 제약과 세부 사항이 수반됩니다.다음 기사에 설명된 미묘한 문제를 충분히 이해할 수 있는 충분한 경험이 없는 사람은 실제 재무 데이터를 다루기 전에 심각하게 재고해야 합니다.

http://lemnik.wordpress.com/2011/03/25/bigdecimal-and-your-money

Big Decimal만이 정확한 표현이거나 퍼즐의 유일한 조각은 아닙니다.특정 상황에서는 정수로 저장된 센트로 뒷받침되는 Money 클래스를 사용하면 충분할 수 있으며 Big Decimal보다 훨씬 빠릅니다.예, 이는 달러를 통화로 사용하고 금액을 제한한다는 것을 의미하지만, 이러한 제약은 많은 사용 사례에서 완벽하게 허용되며, 모든 통화에는 반올림 및 하위 표시에 대한 특별한 사례가 있기 때문에 "범용" 솔루션은 없습니다.

언급URL : https://stackoverflow.com/questions/285680/representing-monetary-values-in-java

반응형