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 тоже. |