powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Написание условия BigDecimal
24 сообщений из 24, страница 1 из 1
Написание условия BigDecimal
    #37981031
GReddyD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.

Подскажите пожалуйста как обозначить условие для BigDecimal:

На вход приходит параметр Thr и он бывает разный, этот параметр BigDecimal.

Мне необходимо сделать условие если Thr имеет значение 3, то следует определенный ответ.

Подскажите как написать данное условие, заранее спасибо всем большое за помощь ))
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981053
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if Thr.intValue() == 3
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981142
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
intValue() отсекает дробную часть..
Условие будет истинным и для thr со значением 3.5.
Так что:
if ( thr.doubleValue() == 3 )
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981175
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GReddyD,

Код: java
1.
2.
3.
4.
5.
6.
...
	BigDecimal b = new BigDecimal(3);
	if(0==thr.compareTo(b)) {
           ...
	}
...
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981182
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidGReddyD,

Код: java
1.
2.
3.
4.
5.
6.
...
	BigDecimal b = new BigDecimal(3);
	if(0==thr.compareTo(b)) {
           ...
	}
...

а к equals презрение? потому что слишком очевидно?
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981192
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,

Консистентно.
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981206
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidgrasoff.net,

Консистентно.нерусский штоле?
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981248
super-code
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Совет: Вообще, числа с плавающей точкой принято сравнивать с каким-то интервалом, например от 2,99 до 3,01. Иначе, если эта тройка рассчетная, то легко может быть 3,0000001, хотя по математике должно было получится 3 (читать реализацию чисел в плавающей точкой в процессорах).
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981557
AlexJm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netivanov-voidGReddyD,

Код: java
1.
2.
3.
4.
5.
6.
...
	BigDecimal b = new BigDecimal(3);
	if(0==thr.compareTo(b)) {
           ...
	}
...

а к equals презрение? потому что слишком очевидно?
потому что equals - это неправильно.
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981592
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJmequals - это неправильнопочему?
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981602
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,

BigDecimal 3.0 не будет равен 3.00, например
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981718
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти методы важно определять консистентными- если x.compareTo(y) == 0, то и x.equals(y) ==true , иначе при работе с коллекциями столкнетесь с проблемами -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
...
public class TestClass {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashSet hashSet = new HashSet();
		hashSet.add(new BigDecimal(3));
		hashSet.add(new BigDecimal(3.00));
		hashSet.add(new BigDecimal(3.0000000000));
		hashSet.add(new BigDecimal(3.00000));
		hashSet.add(new BigDecimal(3.00));
		
		TreeSet treeSet = new TreeSet();
		treeSet.add(new BigDecimal(3));
		treeSet.add(new BigDecimal(3.00));
		treeSet.add(new BigDecimal(3.0000000000));
		treeSet.add(new BigDecimal(3.00000));
		treeSet.add(new BigDecimal(3.00));

		System.out.println(hashSet.size());
		System.out.println(treeSet.size());
	}
}

...



Код: java
1.
2.
1
1
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981814
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманBigDecimal 3.0 не будет равен 3.00, напримерщето ты говоришь
наверное, про stripTrailingZeros не читал, даааа?
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981822
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidЭти методы важно определять консистентными- если x.compareTo(y) == 0, то и x.equals(y) ==true , иначе при работе с коллекциями столкнетесь с проблемами
compareTo никак не используется в коллекциях, кроме случая с сортировкой. Откуда требование к "консистенции", не понятно.

ivanov-void
Код: java
1.
2.
3.
4.
5.
		hashSet.add(new BigDecimal(3));
		hashSet.add(new BigDecimal(3.00));
		hashSet.add(new BigDecimal(3.0000000000));
		hashSet.add(new BigDecimal(3.00000));
		hashSet.add(new BigDecimal(3.00));



Чуть не подавился от смеха. Рассказать как компилятор работает?
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981825
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidЭти методы важно определять консистентными- если x.compareTo(y) == 0, то и x.equals(y) ==true щето ты опять говоришь?
ты русский язык по каким словарям учишь? откуда в тебе это слово? консистентный.

вот по твоему выделенному "если, то" лагман уже отписался
смари:
Код: java
1.
2.
3.
4.
BigDecimal b1 = new BigDecimal("3.0");
BigDecimal b2 = new BigDecimal("3.00");
System.out.println(b1.compareTo(b2));
System.out.println(b1.equals(b2));


удивилсо?
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981832
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netнаверное, про stripTrailingZeros не читал, даааа?
При чем здесь этот метод? он же значение scale не меняет.
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981866
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczgrasoff.netнаверное, про stripTrailingZeros не читал, даааа?
При чем здесь этот метод? он же значение scale не меняет.так-то я даже не понял к чему твой вопрос и утверждение. scale ничем не меняется кроме конструкторов жееее. не?
Код: java
1.
2.
3.
4.
BigDecimal b1 = new BigDecimal("3.0");
BigDecimal b2 = new BigDecimal("3.00");
System.out.println(b1.compareTo(b2));
System.out.println(b1.equals(b2));



и

Код: java
1.
2.
3.
4.
BigDecimal b1 = new BigDecimal("3.0");
BigDecimal b2 = new BigDecimal("3.00");
System.out.println(b1.stripTrailingZeros().equals(b2.stripTrailingZeros()));
System.out.println(b1.compareTo(b2));
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981895
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netтак-то я даже не понял к чему твой вопрос и утверждение. scale ничем не меняется кроме конструкторов жееее. не?

Ха! Странно. Мне по доке показалось, что если разный scale то equals всегда false. Теперь понял. Спасибо.
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981902
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безусловно; вы меня удивляете -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
...
public class TestClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//  equals(...) -- as conditions for the equality
		HashSet hashSet = new HashSet();
		hashSet.add(new BigDecimal("3"));
		hashSet.add(new BigDecimal("3.00"));
		hashSet.add(new BigDecimal("3.0000000000"));
		hashSet.add(new BigDecimal("3.00000"));
		hashSet.add(new BigDecimal("3.00"));
		
		// compareTo(...) -- as conditions for the equality
		TreeSet treeSet = new TreeSet();
		treeSet.add(new BigDecimal("3"));
		treeSet.add(new BigDecimal("3.00"));
		treeSet.add(new BigDecimal("3.0000000000"));
		treeSet.add(new BigDecimal("3.00000"));
		treeSet.add(new BigDecimal("3.00"));

		System.out.println(hashSet.size());
		System.out.println(treeSet.size());

	}

}

...



Код: java
1.
2.
4
1
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37981962
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidБезусловно; вы меня удивляете
Я сегодня сам себя удивляю.
JavaDocNote: care should be exercised if BigDecimal objects are used as keys in a SortedMap or elements in a SortedSet since BigDecimal's natural ordering is inconsistent with equals. See Comparable, SortedMap or SortedSet for more information.
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37982633
GReddyD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, а подскажите какой элемент можно выбрать для объявления значения отрезка, т.е.:

"if (Thr. ........ ) {"

Интервал значений от 1 до 20.
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37982650
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37984755
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeСовет: Вообще, числа с плавающей точкой принято сравнивать с каким-то интервалом, например от 2,99 до 3,01. Иначе, если эта тройка рассчетная, то легко может быть 3,0000001, хотя по математике должно было получится 3 (читать реализацию чисел в плавающей точкой в процессорах).

+1
...
Рейтинг: 0 / 0
Написание условия BigDecimal
    #37984789
mesier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
super-codeСовет: Вообще, числа с плавающей точкой принято сравнивать с каким-то интервалом, например от 2,99 до 3,01. Иначе, если эта тройка рассчетная, то легко может быть 3,0000001, хотя по математике должно было получится 3 (читать реализацию чисел в плавающей точкой в процессорах).
Если все расчеты велись именно с BigDecimal, то всё нормально будет.
С Double - да, такие фокусы возможны вполне.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Написание условия BigDecimal
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]