Вниз  Java-программирование (1-ые посты)
- 5.06.2013 / 15:01
gost6678
  Пользователь

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
  Пользователь

mrEDitor 
Сейчас: Offline
gost6678, числа с плавающей точкой имеют свойство изменять значения, т.е.:
  1. float j = 3.7f * 4.5f;
  2. Log.println(j); // 16.650000000000002
Так что не факт что ты так чего добьешься. Домножай на 100 и сохраняй в int, если не хочешь терять точность.
- 6.06.2013 / 09:37
gost6678
  Пользователь

gost6678 
mrEDitor, мой способ как раз и сделан для того,чтобы отсекать лишние знаки после определенного количества чисел.
- 6.06.2013 / 11:24
Freddy
  Пользователь

Freddy 
Сейчас: Offline
gost6678 (05.06.2013/15:01)
double a=1.0001;
int b=a*100;
double c=b/100; в итоге в переменной "c" будет 1.00
1. Вторая строчка не скомпилируется.
2. В третьей строке и числитель и знаменатель - целые числа, значит и результат - целое число, т. е. например 1,111111 будет округлено до 1, а не 1,11
- 6.06.2013 / 11:52
gost6678
  Пользователь

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
  Пользователь

mrEDitor 
Сейчас: Offline
Freddy, это конструкция вида
float a = getBadFloat();
a = (int) Math.round(a * 100) / 100.0f;
Только старательно искореженная :)

Изменено mrEDitor (6.06 / 11:55) (всего 1 раз)
- 6.06.2013 / 11:55
gost6678
  Пользователь

gost6678 
А если вот так сделать, то что будет:
double a=1.0001;
int b=(int)a*100;
double c=(double)b/100;
- 6.06.2013 / 11:56
mrEDitor
  Пользователь

mrEDitor 
Сейчас: Offline
Будет b = 100; c = 1.
Там где (int) по твоей задумке все должно быть в скобках. Только зачем эти одноразовые переменные?

Изменено mrEDitor (6.06 / 11:57) (всего 1 раз)
- 6.06.2013 / 11:57
gost6678
  Пользователь

gost6678 
А если так:
double a=1.1001;
int b=(int)a*100;
double c=(double)b/100;
- 6.06.2013 / 12:00
mrEDitor
  Пользователь

mrEDitor 
Сейчас: Offline
gost6678, Спроси у компилятора :) То же самое будет. И если а = 1.1 тоже.
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)