자바에서 큰 소수점을 나타내는 데이터 유형
-
05-07-2019 - |
문제
"10364055.81"과 같은 소수점 번호를 나타내는 데이터 유형.
Double을 사용해 보았을 때 :
double d = 10364055.81;
그러나 숫자를 인쇄하려고 할 때 그 표시는 "1.036405581E7", 내가 원하지 않는.
bigdecimal을 사용해야합니까? 그러나 그 표시는 그다지 나타납니다 10364055.81000000052154064178466796875. 값을 그대로 표시하는 데이터 유형이 있습니까? 또한 숫자는 예를 들어 취한 것보다 클 수 있습니다.
BTW, BigDecimal Effect를 사용하여 응용 프로그램의 성능을 사용합니까 ?? 나는 이것을 거의 모든 DTO에서 사용할 수 있습니다.
해결책
당신은 bigdecimal을 사용해야합니다 - 그러나 문자열 생성자를 사용하십시오, EG :
new BigDecimal("10364055.81");
당신이 통과하는 경우 double
Bigdecimal에서 Java는 두 배를 먼저 만들어야합니다. 복식은 대부분의 소수점 분수를 정확하게 나타낼 수 없으므로 IT 하다 값을 만듭니다 10364055.81000000052154064178466796875
그리고 그 다음에 그것을 Bigdecimal 생성자에게 전달합니다. 이 경우 Bigdecimal은 실제로 둥근 버전을 의미한다는 것을 알 방법이 없습니다.
일반적으로 말하자면, 비 스트링 생성자를 Bigdecimal의 생성자를 사용하는 것은 클래스의 모든 혜택을받지 못한다는 경고로 간주되어야합니다.
편집하다 - 당신이하고 싶은 일을 정확하게 다시 읽는 것을 바탕으로, 나의 초기 주장은 아마도 너무 강할 것입니다. Bigdecimal은 십진수 값을 정확하게 표현해야 할 때 좋은 선택입니다 (돈 취급은 명백한 선택이 되십시오. 5.99 * 백만 백만을 원하지 않습니다. 5990016.45
예를 들어.
하지만 저장된 숫자에 대해 걱정하지 않으면 내부적 당신이 입력 한 10 진수 문자와는 매우 다른 값으로, 같은 형식으로 다시 인쇄하고 싶다면 다른 사람들이 말했듯이 NumberFormat
(이 경우, new DecimalFormat("########.##")
)는 두 배를 멋지게 출력하기 위해 트릭을 수행하거나 string.format 똑같은 일을 할 수 있습니다.
성능에 관해서는 - 큰 비도체는 프리미티브를 사용하는 것보다 자연스럽게 느리게됩니다. 그러나 일반적으로 프로그램의 대다수가 수학적 조작과 관련이 없다면 실제로 속도 차이를 알지 못할 것입니다. 그것은 당신이 모든 빅 imals를 사용해야한다고 말하는 것이 아닙니다. 그러나 오히려, 당신이 평범하게 실현하기 어렵거나 불가능한 그들의 특징으로부터 진정한 혜택을 얻을 수 있다면 doubles
, 그런 다음 이론적으로 소개하는 소형 성능 차이를 땀을 흘리지 마십시오.
다른 팁
숫자가 표시되는 방법 별개의 숫자가 저장되는 방식으로부터.
보세요 십진법 이중 (또는 플로트 등) 일 때 숫자를 표시 할 수있는 방법을 제어합니다.
BigDecimal을 선택하면 Double (또는 그 반대로)에는 장단점이 있으며 요구 사항에 따라 다릅니다. 보다 여기 더 많은 정보를 위해서. 요약에서 :
요약하면, 원시 성능과 공간이 가장 중요한 요소 인 경우 원시적 부동 소수점 유형이 적절합니다. 소수점 값을 정확하게 표현 해야하는 경우, 고정밀 계산이 필요하거나 반올림의 미세 제어가 필요합니다. Bigdecimal만이 필요한 기능을 갖습니다.
이 숫자를 저장하기에 두 배가 충분합니다. 문제가 인쇄하거나 문자열에 넣을 때 형식이 마음에 들지 않으면 숫자 format을 사용할 수 있습니다. http://java.sun.com/javase/6/docs/api/java/text/numberformat.html
System.out.printf ()와 함께 Double 및 Display를 사용할 수 있습니다.
double d = 100003.81;
System.out.printf("%.10f", d);
.10F- 정밀도가 10 인 이중을 의미합니다