2013-02-12 2 views
8

null 값을 허용하는 BigDecimal의 기본 연산을 사용하는 BigDecimal 라이브러리가 있습니까?null 값을 허용하는 BigDecimal 용 Java 수학 라이브러리

Null은 수학적 목적으로 0으로 처리해야합니다.

가능한 null 값에 대해 모든 null 검사를 수행하고 싶지 않습니다.

데이터베이스, 응용 프로그램 또는보기에서 Null 값을 허용하지 않고 new BigDecimal(0)으로 모든 것을 초기화하거나 Null 허용 값의 모든 사용에 대해 Null 검사를 수행합니다. 같은

뭔가 :

public static BigDecimal add(final BigDecimal value, final BigDecimal augend) 
{ 
    if (value == null) 
     return augend; 
    else if (augend == null) 
     return value; 
    else 
     return value.add(augend); 
} 

public static BigDecimal multiply(final BigDecimal value, final BigDecimal multiplicand) 
{ 
    if (value == null || multiplicand == null) 
     return null; 

    return value.multiply(multiplicand); 
} 

답변

13

코딩을 저장하고 데이터베이스에 Null 값을 허용하지 마십시오. 기본값을 0으로 만드십시오.

new BigDecimal(0)의 경우 : 아니오, BigDecimal.ZERO을 사용하십시오.

+1

+1에 대한 'BigDecimal.Zero'. 절대 확인하지 마. – djmj

+0

주어진 답변을 통해 데이터베이스의 10 진수 값에 null 값을 허용하지 않기로 결정했습니다. 나는 이미 오래도록 허용하는 방법을 생각하고 있었고, 널 상태를 추적하는 것은 코딩 시간 낭비였습니다. – djmj

+0

GUI 용도로 부동 소수점 비교 함수를 생성하기위한 작은 오버 헤드는 공정한 거래입니다. – djmj

5

는 내가 널 검사 라이브러리의 지점이 표시되지 않는 것 같아요. 물론 라이브러리는 NPE를 던지지 않지만 호출자는 결국이를 확인해야합니다. 위의 전화 건 사람이 무엇을 할 것입니까? 그것은 단지 출력을 사용할 수 없습니다. 그것은 값으로 무엇이든 할 수 있기 전에 반환 된 값이 어떤 시점에서 null인지 확인해야 할 것입니다.

또한 필자가 작성한 애플리케이션의 경우 null은 0과 많이 다릅니다. null을 0으로 처리 한 것을 사용하고 싶지는 않습니다.

DB에 null이 허용되지 않는다는 요구 사항이있는 경우 DB에 쓰기 전에 DAO 계층에서 null을 확인합니다.

+0

을 매우 유용한 데이터가 널 확인할 수 있습니다 경우 볼 표시 기타 정보를 사용자에게 제공합니다. 현재 모든 것이 null 값을 검사하는 DAO 계층에서이 작업을 사용하지 않습니다. 현재 관련 데이터 만보기위한 테스트. – djmj

+0

아 좋아. 그러면 위와 같은 정적 방법으로 문제를 해결할 수 있습니다. nulls를 0으로 처리하거나 Nde가 null 인 경우 NPE를 throw하지 않는 BigDecimal 라이브러리를 찾는 것이 많은 도움이 될지 의심됩니다. – Kyle

+1

당신이 그들을 얻는 곳마다 널을 0으로 변환하십시오; 거기에 널 (null)을 두지 마라. –

6

나는 비슷한 문제가있다. (데이터베이스와 관련이 없지만, 아마도 null BigDecimal 두개를 요약해야한다.) 자바 8 같은

public static BigDecimal add(BigDecimal... addends) { 
    BigDecimal sum = BigDecimal.ZERO; 
    if (addends != null) { 
     for (BigDecimal addend : addends) { 
      if (addend == null) { 
       addend = BigDecimal.ZERO; 
      } 
      sum = sum.add(addend); 
     } 
    } 
    return sum; 
} 

: 어떤 라이브러리를 찾을 수 없습니다, 그래서 다음과 같은 기능을 자신을 작성했던 JSF에서

public static BigDecimal add(BigDecimal... addends) { 
    if (addends == null) { 
     return BigDecimal.ZERO; 
    } 
    return Arrays.stream(addends) 
      .filter(Objects::nonNull) 
      .reduce(BigDecimal.ZERO, BigDecimal::add); 
}