Saya memiliki kelas domain dengan unitPrice yang ditetapkan sebagai tipe data BigDecimal. Sekarang saya mencoba membuat metode untuk membandingkan harga tetapi sepertinya saya tidak dapat memiliki operator perbandingan dalam tipe data BigDecimal. Apakah saya harus mengubah tipe data atau ada cara lain?
java
operator-keyword
bigdecimal
pengguna3127109
sumber
sumber
BigDecimal
ituObject
, tidak, ini tidak berfungsi. Tapi Anda bisa mengurangi satu sama lain dan memeriksa apakah nilai yang dihasilkan adalah<0
,==0
atau>0
. Jika tidak, Anda bisa menggunakan cara standar dengan metode yang disediakan dari BigDecimalcompareTo
metode yang mengembalikan -1, 0 atau 1. Yang pada dasarnya adalahComparable
.Jawaban:
Setiap objek Kelas
BigDecimal
memiliki metodecompareTo
yang dapat Anda gunakan untuk membandingkannya dengan BigDecimal lainnya. HasilnyacompareTo
kemudian dibandingkan> 0
,== 0
atau< 0
tergantung apa yang Anda butuhkan. Baca dokumentasi dan Anda akan mengetahuinya.Operator
==
,<
,>
dan sebagainya hanya dapat digunakan pada tipe data primitif sepertiint
,long
,double
atau kelas wrapper mereka sepertiInteger
danDouble
.Dari dokumentasi
compareTo
:sumber
a.compareTo(b)
mengembalikan angka yang lebih besar dari nol ifa > b
,0
ifa == b
, dan kurang dari nol ifa < b
.Singkatnya:
sumber
Gunakan
compareTo
metode BigDecimal:sumber
Anda dapat menggunakan metode bernama
compareTo
,x.compareTo(y)
. Ini akan mengembalikan 0 jika x dan y sama, 1 jika x lebih besar dari y dan -1 jika x lebih kecil dari ysumber
Berikut adalah contoh untuk keenam operator perbandingan boolean (<, ==,>,> =,! =, <=):
sumber
BigDecimal
bukan primitif, jadi Anda tidak bisa menggunakan<
,>
operator. Namun, karena ini aComparable
, Anda dapat menggunakancompareTo(BigDecimal)
untuk efek yang sama. Misalnya:sumber
Menggunakan com.ibm.etools.marshall.util.BigDecimalRange util kelas IBM seseorang dapat membandingkan jika BigDecimal dalam jangkauan.
sumber
Utas ini memiliki banyak jawaban yang menyatakan bahwa metode BigDecimal.compareTo (BigDecimal) adalah yang akan digunakan untuk membandingkan instance BigDecimal . Saya hanya ingin menambahkan lagi yang tidak berpengalaman dengan menggunakan metode BigDecimal.compareTo (BigDecimal) untuk berhati-hati dengan cara Anda membuat instance BigDecimal . Jadi, misalnya ...
new BigDecimal(0.8)
akan membuatBigDecimal
instance dengan nilai yang tidak persis0.8
dan berskala 50+,new BigDecimal("0.8")
akan membuatBigDecimal
contoh dengan nilai yang merupakan persis0.8
dan yang memiliki skala 1... dan keduanya akan dianggap tidak sama menurut metode BigDecimal.compareTo (BigDecimal) karena nilainya tidak sama ketika skala tidak terbatas pada beberapa tempat desimal.
Pertama-tama, berhati-hatilah untuk membuat
BigDecimal
instance Anda denganBigDecimal(String val)
konstruktor atauBigDecimal.valueOf(double val)
metode daripadaBigDecimal(double val)
konstruktor. Kedua, perhatikan bahwa Anda dapat membatasi skala instance BigDecimal sebelum membandingkannya menggunakan metode BigDecimal.setScale (int newScale, RoundingMode roundingMode) .sumber