У меня есть класс домена с unitPrice, установленным как тип данных BigDecimal. Сейчас я пытаюсь создать метод сравнения цен, но, похоже, у меня нет операторов сравнения в типе данных BigDecimal. Мне нужно изменить тип данных или есть другой способ?
java
operator-keyword
bigdecimal
user3127109
источник
источник
BigDecimal
как естьObject
, нет, это не работает. Но вы можете просто вычесть их друг из друга и проверить, будет ли полученное значение<0
,==0
или>0
. В противном случае вы могли бы пойти стандартным путем с предоставленными методами из BigDecimalcompareTo
метод, который возвращает -1, 0 или 1. В основном этоComparable
.Ответы:
У каждого объекта класса
BigDecimal
есть метод, которыйcompareTo
вы можете использовать для сравнения с другим BigDecimal. РезультатcompareTo
сравнивается> 0
,== 0
или в< 0
зависимости от того, что вам нужно. Прочтите документацию, и вы узнаете.Операторы
==
,<
,>
и так далее могут быть использованы только на примитивных типов данных , таких какint
,long
,double
или их классов обертки , какInteger
иDouble
.Из документации
compareTo
:источник
a.compareTo(b)
возвращает число больше нуля, еслиa > b
,0
еслиa == b
, и меньше нуля, еслиa < b
.Короче:
источник
Используйте
compareTo
метод BigDecimal:источник
Вы можете использовать метод с именем
compareTo
,x.compareTo(y)
. Он вернет 0, если x и y равны, 1, если x больше y и -1, если x меньше yисточник
Вот пример для всех шести логических операторов сравнения (<, ==,>,> =,! =, <=):
источник
BigDecimal
не является примитивным, так что вы не можете использовать<
,>
оператор. Однако, поскольку это aComparable
, вы можете использовать егоcompareTo(BigDecimal)
для того же эффекта. Например:источник
Используя класс утилиты com.ibm.etools.marshall.util.BigDecimalRange IBM, можно сравнить, находится ли BigDecimal в диапазоне.
источник
В этом потоке есть множество ответов, в которых говорится, что метод BigDecimal.compareTo (BigDecimal) - это метод, который можно использовать для сравнения экземпляров BigDecimal . Я просто хотел добавить, что больше не имеет опыта использования метода BigDecimal.compareTo (BigDecimal), чтобы быть осторожным с тем, как вы создаете свои экземпляры BigDecimal . Так, например ...
new BigDecimal(0.8)
создастBigDecimal
экземпляр со значением, которое не совсем точно0.8
и имеет масштаб 50+,new BigDecimal("0.8")
создастBigDecimal
экземпляр со значением , которое является точно0.8
и который имеет шкалу от 1... и эти два будут считаться неравными согласно методу BigDecimal.compareTo (BigDecimal), потому что их значения неравны, если масштаб не ограничен несколькими десятичными знаками.
Прежде всего, будьте осторожны, создавая свои
BigDecimal
экземпляры с помощьюBigDecimal(String val)
конструктора илиBigDecimal.valueOf(double val)
метода, а неBigDecimal(double val)
конструктора. Во-вторых, обратите внимание, что вы можете ограничить масштаб экземпляров BigDecimal перед их сравнением с помощью метода BigDecimal.setScale (int newScale, RoundingMode roundingMode) .источник