| Программистам, создающим приложения дли финансового с |
|
|
Thursday, 31 August 2006 | Сайт «Java-академия» для раздела Ученье – свет Нам часто приходится работать с формулами и реализовывать сложные математические расчеты. И с ниже описанной ситуацией однажды, наверное, сталкивался каждый из нас. Как вы думаете, что будет результатом выполнения вот такой программы?
public class Calculate
{ public static void main(String args[]) { System.out.println(2.00 – 1.10); } } Объяснение
Готов поспорить, что для многих ответом будет 0.90. И это не верно! Потому что программа не знает, сколько цифр после запятой вы хотите видеть, и значит, не выведет интуитивно ожидаемый результат. Все намного сложнее. Если вы знакомы с правилами конвертации числа с плавающей точкой в строковое значение Double.toSring() [Java-API], то вы, наверное, догадаетесь, что результатом выполнения программы будет наиболее приближенное число к 0.90. А значит 0.8999999999999999.
Не очень правильное, но все же решение, это использование функции printf.
System.out.println(“%.2f”,2.00 – 1.10);
Еще одним и более правильным решением является использование BigDecimal(String), но не BigDecimal(double). Так как BigDecimal(doble) вернет точное значение числа.
Например, new BigDecimal(.1) вернет 0.1000000000000000055511151231257827021181583404541015625. Правильное использование BigDecimal в программе поможет нам получить желаемый результат.
import java.math.BigDecimal;
public class Calculate { public static void main(String args[]) { System.out.println(new BigDecimal(“2.00”.substruct(new BigDecimal(“1.10”))); } } |