Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Написание условия BigDecimal / 24 сообщений из 24, страница 1 из 1
02.10.2012, 23:00:45
    #37981031
GReddyD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
Всем доброго времени суток.

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

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

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

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

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

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

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

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

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

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

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

BigDecimal 3.0 не будет равен 3.00, например
...
Рейтинг: 0 / 0
03.10.2012, 13:06:19
    #37981718
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
Эти методы важно определять консистентными- если 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
03.10.2012, 13:43:58
    #37981814
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
ЛагманBigDecimal 3.0 не будет равен 3.00, напримерщето ты говоришь
наверное, про stripTrailingZeros не читал, даааа?
...
Рейтинг: 0 / 0
03.10.2012, 13:47:07
    #37981822
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
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
03.10.2012, 13:48:03
    #37981825
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
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
03.10.2012, 13:48:58
    #37981832
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
grasoff.netнаверное, про stripTrailingZeros не читал, даааа?
При чем здесь этот метод? он же значение scale не меняет.
...
Рейтинг: 0 / 0
03.10.2012, 14:00:03
    #37981866
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
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
03.10.2012, 14:06:49
    #37981895
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
grasoff.netтак-то я даже не понял к чему твой вопрос и утверждение. scale ничем не меняется кроме конструкторов жееее. не?

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

Код: 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
03.10.2012, 14:22:16
    #37981962
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
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
03.10.2012, 20:17:22
    #37982633
GReddyD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Написание условия BigDecimal
Ребят, а подскажите какой элемент можно выбрать для объявления значения отрезка, т.е.:

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

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

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


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