Java에서 BigDecimal 변수 == 0인지 확인하는 방법
자바에는 다음 코드가 있습니다.
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
if 조건을 쓰는 가장 좋은 방법은 무엇입니까?
대신 사용:
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
상수와 비교함으로써 다음 항목을 구성할 필요가 없어집니다.new BigDecimal(0)
모든 실행.
참고로BigDecimal
또한 사용자의 편의를 위해 상수도 있습니다.
주의!
사용할 수 없는 이유는 규모를 고려하기 때문입니다.
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
순수하게 수치적으로 비교하기에는 부적합합니다.그러나 다음 항목을 비교할 때는 규모를 고려하지 않습니다.
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
또는 signum()을 사용할 수 있습니다.
if (price.signum() == 0) {
return true;
}
체크할 수 있는 상수가 있습니다.
someBigDecimal.compareTo(BigDecimal.ZERO) == 0
또는 클래스 Big Decimal의 equal 메서드와 compare To 메서드의 동작이 서로 일치하지 않는다는 점을 언급할 필요가 있다고 생각합니다.
이는 기본적으로 다음을 의미합니다.
BigDecimal someValue = new BigDecimal("0.00");
System.out.println(someValue.compareTo(BigDecimal.ZERO) == 0); // true
System.out.println(someValue.equals(BigDecimal.ZERO)); // false
그러므로, 여러분은 저울에 매우 조심해야 합니다.someValue
그렇지 않으면 예기치 않은 결과를 얻을 수 있습니다.
저는 보통 다음을 사용합니다.
if (selectPrice.compareTo(BigDecimal.ZERO) == 0) { ... }
사용하는 것이 좋습니다.equals()
그것들이 객체이기 때문에, 그리고 빌트인(built-in)을 이용한다.ZERO
인스턴스:
if (selectPrice.equals(BigDecimal.ZERO))
주의:.equals()
select Price가 select Price와 같은 스케일(0)이 아닌 한 select Price는 스케일(0)을 고려합니다..ZERO
그러면 false가 반환됩니다.
방정식을 그대로 확장하려면:
if (selectPrice.compareTo(BigDecimal.ZERO) == 0)
특정한 수학적인 상황에서는0.00 != 0
그래서 내가 상상하는 건.equals()
는 스케일을 고려합니다. 0.00
100분의 1의 자리에는 정밀도를 부여합니다.0
정확하지 않아요.상황에 따라서는, 계속 하고 싶은 일이 있습니다..equals()
.
그리피독은 확실히 옳다.
코드:
BigDecimal myBigDecimal = new BigDecimal("00000000.000000");
System.out.println("bestPriceBigDecimal=" + myBigDecimal);
System.out.println("BigDecimal.valueOf(0.000000)=" + BigDecimal.valueOf(0.000000));
System.out.println(" equals=" + myBigDecimal.equals(BigDecimal.ZERO));
System.out.println("compare=" + (0 == myBigDecimal.compareTo(BigDecimal.ZERO)));
결과:
myBigDecimal=0.000000
BigDecimal.valueOf(0.000000)=0.0
equals=false
compare=true
BigDecimal 비교의 장점은 이해하지만 직관적인 구성(==, <, >, <=, > 연산자 등)이라고는 생각하지 않습니다.당신이 머릿속에 백만 가지 물건을 가지고 있을 때, 인지 부하를 줄일 수 있는 것은 무엇이든 좋은 것이다.그래서 저는 몇 가지 유용한 편의 기능을 만들었습니다.
public static boolean equalsZero(BigDecimal x) {
return (0 == x.compareTo(BigDecimal.ZERO));
}
public static boolean equals(BigDecimal x, BigDecimal y) {
return (0 == x.compareTo(y));
}
public static boolean lessThan(BigDecimal x, BigDecimal y) {
return (-1 == x.compareTo(y));
}
public static boolean lessThanOrEquals(BigDecimal x, BigDecimal y) {
return (x.compareTo(y) <= 0);
}
public static boolean greaterThan(BigDecimal x, BigDecimal y) {
return (1 == x.compareTo(y));
}
public static boolean greaterThanOrEquals(BigDecimal x, BigDecimal y) {
return (x.compareTo(y) >= 0);
}
사용방법은 다음과 같습니다.
System.out.println("Starting main Utils");
BigDecimal bigDecimal0 = new BigDecimal(00000.00);
BigDecimal bigDecimal2 = new BigDecimal(2);
BigDecimal bigDecimal4 = new BigDecimal(4);
BigDecimal bigDecimal20 = new BigDecimal(2.000);
System.out.println("Positive cases:");
System.out.println("bigDecimal0=" + bigDecimal0 + " == zero is " + Utils.equalsZero(bigDecimal0));
System.out.println("bigDecimal2=" + bigDecimal2 + " < bigDecimal4=" + bigDecimal4 + " is " + Utils.lessThan(bigDecimal2, bigDecimal4));
System.out.println("bigDecimal2=" + bigDecimal2 + " == bigDecimal20=" + bigDecimal20 + " is " + Utils.equals(bigDecimal2, bigDecimal20));
System.out.println("bigDecimal2=" + bigDecimal2 + " <= bigDecimal20=" + bigDecimal20 + " is " + Utils.equals(bigDecimal2, bigDecimal20));
System.out.println("bigDecimal2=" + bigDecimal2 + " <= bigDecimal4=" + bigDecimal4 + " is " + Utils.lessThanOrEquals(bigDecimal2, bigDecimal4));
System.out.println("bigDecimal4=" + bigDecimal4 + " > bigDecimal2=" + bigDecimal2 + " is " + Utils.greaterThan(bigDecimal4, bigDecimal2));
System.out.println("bigDecimal4=" + bigDecimal4 + " >= bigDecimal2=" + bigDecimal2 + " is " + Utils.greaterThanOrEquals(bigDecimal4, bigDecimal2));
System.out.println("bigDecimal2=" + bigDecimal2 + " >= bigDecimal20=" + bigDecimal20 + " is " + Utils.greaterThanOrEquals(bigDecimal2, bigDecimal20));
System.out.println("Negative cases:");
System.out.println("bigDecimal2=" + bigDecimal2 + " == zero is " + Utils.equalsZero(bigDecimal2));
System.out.println("bigDecimal2=" + bigDecimal2 + " == bigDecimal4=" + bigDecimal4 + " is " + Utils.equals(bigDecimal2, bigDecimal4));
System.out.println("bigDecimal4=" + bigDecimal4 + " < bigDecimal2=" + bigDecimal2 + " is " + Utils.lessThan(bigDecimal4, bigDecimal2));
System.out.println("bigDecimal4=" + bigDecimal4 + " <= bigDecimal2=" + bigDecimal2 + " is " + Utils.lessThanOrEquals(bigDecimal4, bigDecimal2));
System.out.println("bigDecimal2=" + bigDecimal2 + " > bigDecimal4=" + bigDecimal4 + " is " + Utils.greaterThan(bigDecimal2, bigDecimal4));
System.out.println("bigDecimal2=" + bigDecimal2 + " >= bigDecimal4=" + bigDecimal4 + " is " + Utils.greaterThanOrEquals(bigDecimal2, bigDecimal4));
결과는 다음과 같습니다.
Positive cases:
bigDecimal0=0 == zero is true
bigDecimal2=2 < bigDecimal4=4 is true
bigDecimal2=2 == bigDecimal20=2 is true
bigDecimal2=2 <= bigDecimal20=2 is true
bigDecimal2=2 <= bigDecimal4=4 is true
bigDecimal4=4 > bigDecimal2=2 is true
bigDecimal4=4 >= bigDecimal2=2 is true
bigDecimal2=2 >= bigDecimal20=2 is true
Negative cases:
bigDecimal2=2 == zero is false
bigDecimal2=2 == bigDecimal4=4 is false
bigDecimal4=4 < bigDecimal2=2 is false
bigDecimal4=4 <= bigDecimal2=2 is false
bigDecimal2=2 > bigDecimal4=4 is false
bigDecimal2=2 >= bigDecimal4=4 is false
예를 들어 다음과 같은 간단한 방법이 있습니다.
BigDecimal price;
if(BigDecimal.ZERO.compareTo(price) == 0){
//Returns TRUE
}
Kotlin에 도움이 되는 확장기능을 여기서 공유하겠습니다.
fun BigDecimal.isZero() = compareTo(BigDecimal.ZERO) == 0
fun BigDecimal.isOne() = compareTo(BigDecimal.ONE) == 0
fun BigDecimal.isTen() = compareTo(BigDecimal.TEN) == 0
if(price.floatValue() == 0){
return true; //works for 0\0.0
}
BigDecimal.ZERO.setScale(2).equals(new BigDecimal("0.00"));
0을 나타내는 정적 상수가 있습니다.
BigDecimal.ZERO.equals(selectPrice)
다음 작업 대신 이 작업을 수행해야 합니다.
selectPrice.equals(BigDecimal.ZERO)
「이러한 일이 의selectPrice
null
.
언급URL : https://stackoverflow.com/questions/10950914/how-to-check-if-bigdecimal-variable-0-in-java
'source' 카테고리의 다른 글
Vue js 2를 사용하여 구성 요소 하위 구성 요소 체인에서 이벤트를 버블링하려면 어떻게 해야 합니까? (0) | 2022.08.16 |
---|---|
vuex를 사용하여 API에서 데이터를 가져오는 모범 사례 (0) | 2022.08.16 |
루프 내에는 현재 루프되어 있는 일치를 취득하여 특정 이름의 참가자를 반환하는 함수가 있습니다.중복을 방지하는 방법 (0) | 2022.08.16 |
긴 인쇄 방법 (0) | 2022.08.16 |
Nuxt with Typescript에서 루트 주입을 사용하여 사용자 지정 플러그인을 만드는 방법 (0) | 2022.08.16 |