Все прекрасно знают, что для точных вычислений(например деньги) необходимо ВСЕГДА использовать BigDecimal.

Особенности:

1)Перевод float и double в BigDecimal:


		float i = 0.1f;
		double j = 0.2;
		BigDecimal value = new BigDecimal(Float.toString(i));
		BigDecimal value2 = new BigDecimal(Double.toString(j));
		
		System.out.println(value);

Вывод на консоль 0.3

2)Если мы сравниваем 2 числа, то ни в коем случае НЕЛЬЗЯ использовать equals, используем compareTo

		BigDecimal a = new BigDecimal("1");
		BigDecimal b = new BigDecimal("1.0");
		//false
		System.out.println(a.equals(b));
		//0 - значит числа равны
		System.out.println(a.compareTo(b));

3)BigDecimal как и строки он НЕИЗМЕНЯЕМЫ, т.е. если сделать так, то value = 0.1, а не 0.3 !!!


		BigDecimal value = new BigDecimal("0.1");
		BigDecimal value2 = new BigDecimal("0.2");
		
		//0.1
		System.out.println(value);
		//0.3
		System.out.println(value.add(value2));
		//0.1 - value НЕ изменилось
		System.out.println(value);

Т.е. надо делать так:

		BigDecimal value = new BigDecimal("0.1");
		BigDecimal value2 = new BigDecimal("0.2");
		//0.1
		System.out.println(value);
		value = value.add(value2);
		//0.3
		System.out.println(value);

Реклама