2014-12-30 3 views
1

정확한 값을 csv에 데이터베이스에 저장해야합니다. 열에 돈 값이 있습니다. 따라서 은 Money 값을 저장하기 위해 BigDecimal을 사용합니다. 예상대로 내가 얻을 출력으로 '1'Java에서 BigDecimal을 그대로 사용하여 값 인쇄

BigDecimal d=new BigDecimal(1); 
System.out.println(d); 

:

사례 1 :

다른 경우 다음과 같은 예를 생각해 보자.

사례 2 :

그러나 나는 그것에 진수를 추가 할 때, 나는 다른 결과를 얻을 수 있습니다.

BigDecimal d=new BigDecimal(1.1);   
System.out.println(d); 

나는 위의 코드에 대한 출력으로 '1.100000000000000088817841970012523233890533447265625'를 얻을.

사례 3 :

BigDecimal d=new BigDecimal(2.50); 
System.out.println(d); 

나는 위의 코드에 대한 출력으로 '2.5'을 얻는다. 이 경우 0을 생략합니다.

내 클라이언트는 데이터베이스에 저장하기 위해 전달 된 동일한 값을 필요로합니다. 값은 돈 관련 항목이므로 String을 사용하여 값을 저장할 수 없습니다.

그래서 Big Decimals로 전달할 정확한 값을 얻으려면 어떻게해야합니까? 이 같은

+3

정확한 값을 원하면 double을 사용하지 마십시오. '1.1'은 두 배입니다. 대신에 "1.1"을 전달하십시오. 2.5 대 2.50에 관해서는, 이것들은 동일한 값을 나타냅니다. –

+0

@JBNizet 왜 1.1이 double인지에 대한 문장을 추가하고 (부동 소수점 연산이라는 용어를 던짐) 자신이 대답을 가지고있다 – keyser

답변

4

당신은 constructor 매개 변수 String로 사용할 수 있습니다.

BigDecimal d=new BigDecimal("1"); 
System.out.println(d.toString());//Will print 1 



BigDecimal d=new BigDecimal("1.1");   
System.out.println(d.toString()); //Will print 1.1 


BigDecimal d=new BigDecimal("2.50"); 
System.out.println(d.toString()); //Will print 2.50 
+1

이것이 올바른 방법입니다 +1 – dehlen

-1

사용 무언가 :

BigDecimal decimal = new BigDecimal(2.0, new MathContext(2, RoundingMode.UNNECESSARY));