5.06.2013 / 15:01 |  | 
gost6678    Пользователь  
  | Нашел хитрость  для отсечения нужного количества знаков после запятой. Вот пример для того,чтобы оставить только два знака после запятой: double a=1.0001; int b=a*100; double c=b/100;   в итоге в переменной "c" будет 1.00
   Изменено gost6678 (5.06 / 15:01) (всего 2 раза) | 
  5.06.2013 / 15:15 |  | 
mrEDitor    Пользователь  
   Сейчас: Offline 
 Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
   | gost6678, числа с плавающей точкой имеют свойство изменять значения, т.е.: float j = 3.7f * 4.5f;  
Log.println(j); // 16.650000000000002  
 Так что не факт что ты так чего добьешься. Домножай на 100 и сохраняй в int, если не хочешь терять точность.  | 
  6.06.2013 / 09:37 |  | 
gost6678    Пользователь  
  | mrEDitor, мой способ как раз и сделан для того,чтобы отсекать лишние знаки после определенного количества чисел.
   | 
  6.06.2013 / 11:24 |  | 
Freddy    Пользователь  
   Сейчас: Offline 
 Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
   | gost6678 (05.06.2013/15:01) double a=1.0001; int b=a*100; double c=b/100; в итоге в переменной "c" будет 1.001. Вторая строчка не скомпилируется. 2. В третьей строке и числитель и знаменатель - целые числа, значит и результат - целое число, т. е. например 1,111111 будет округлено до 1, а не 1,11
   | 
  6.06.2013 / 11:52 |  | 
gost6678    Пользователь  
  | Freddy, вот так скомпилируется. double a=1.0001; int b=(int)a*100; double c=(double)b/100; Что в итоге будет: сначала число с плавающей точкой умножается на 100 и конвертируется в int ,потом целое число делится на 100 и конвертируется в double/
   Изменено gost6678 (6.06 / 11:54) (всего 1 раз) | 
  6.06.2013 / 11:54 |  | 
mrEDitor    Пользователь  
   Сейчас: Offline 
 Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
   | Freddy,  это конструкция вида float a = getBadFloat(); a = (int) Math.round(a * 100) / 100.0f; Только старательно искореженная    Изменено mrEDitor (6.06 / 11:55) (всего 1 раз) | 
  6.06.2013 / 11:55 |  | 
gost6678    Пользователь  
  | А если вот так сделать, то что будет: double a=1.0001; int b=(int)a*100; double c=(double)b/100;
   | 
  6.06.2013 / 11:56 |  | 
mrEDitor    Пользователь  
   Сейчас: Offline 
 Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
   | Будет b = 100; c = 1. Там где (int) по твоей задумке все должно быть в скобках. Только зачем эти одноразовые переменные?
   Изменено mrEDitor (6.06 / 11:57) (всего 1 раз) | 
  6.06.2013 / 11:57 |  | 
gost6678    Пользователь  
  | А если так: double a=1.1001; int b=(int)a*100; double c=(double)b/100;
   | 
  6.06.2013 / 12:00 |  | 
mrEDitor    Пользователь  
   Сейчас: Offline 
 Имя: Эдуард Откуда: Новороссийск » Таганрог Регистрация: 13.03.2011
   | gost6678,  Спроси у компилятора    То же самое будет. И если а = 1.1 тоже.  |