powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Странные числа на выводе программы!
9 сообщений из 9, страница 1 из 1
Странные числа на выводе программы!
    #39239109
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос: почему больше одного знака после точки?

Код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
package SolverMini;
public class Obshii {
	public static void main (String []args)
	{
		double i;
	for (i=5; i>=0; i=i-0.1){
		System.out.println(i);
	}
 }	
}



Вывод:

5.0
4.9
4.800000000000001
4.700000000000001
4.600000000000001
4.500000000000002
4.400000000000002
4.3000000000000025
4.200000000000003
4.100000000000003
4.0000000000000036
3.9000000000000035
3.8000000000000034
3.7000000000000033
3.600000000000003
3.500000000000003
3.400000000000003
3.300000000000003
3.200000000000003
3.1000000000000028
3.0000000000000027
2.9000000000000026
2.8000000000000025
2.7000000000000024
2.6000000000000023
2.500000000000002
2.400000000000002
2.300000000000002
2.200000000000002
2.100000000000002
2.0000000000000018
1.9000000000000017
1.8000000000000016
1.7000000000000015
1.6000000000000014
1.5000000000000013
1.4000000000000012
1.3000000000000012
1.200000000000001
1.100000000000001
1.0000000000000009
0.9000000000000009
0.8000000000000009
0.700000000000001
0.600000000000001
0.500000000000001
0.400000000000001
0.30000000000000104
0.20000000000000104
0.10000000000000103
1.0269562977782698E-15
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239117
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry56 Вопрос: почему больше одного знака после точки?
Потому что многие десятичные дроби не имеют конечного представления в двоичном виде.
Ищите вводные статьи о том как дроби хранятся в двоичной системе.
http://vestikinc.narod.ru/AB/ni_bin.htm
http://school.dtv.su/sistemyi-perevod-drobnyih-chisel/
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239121
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry56,

у вас к гуглу доступ закрыли? :)
В общем виде ответ на поставленный выше вопрос будет звучать примерно так: «Подобные ошибки связанны с внутренним двоичным (binary) представлением чисел. Подобно тому, как в десятичной системе нельзя точно представить результат деления 1/3, так и в двоичной системе невозможно точно представить 1/10. Если вам нужно исключить ошибки округления, следует использовать класс BigDecimal».
https://habrahabr.ru/post/219595/
и еще много подобных ссылок можно найти там же
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239124
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати с BigDecimal тоже не все так просто, например если из 2.00 вычесть 1.1, то мы не получим 0.9, а получим 0.89999999... и еще кучу цифер
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239130
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicКстати с BigDecimal тоже не все так просто, например если из 2.00 вычесть 1.1, то мы не получим 0.9, а получим 0.89999999... и еще кучу циферрешается округлением
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239132
vsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
vsl
Гость
UsmanNixicКстати с BigDecimal тоже не все так просто, например если из 2.00 вычесть 1.1, то мы не получим 0.9, а получим 0.89999999... и еще кучу циферрешается округлением
решается правильным способом создания BigDecimal
Код: java
1.
2.
3.
4.
bsh % print(new BigDecimal(2.0).subtract(new BigDecimal(1.1)));
0.899999999999999911182158029987476766109466552734375
bsh % print(new BigDecimal("2.0").subtract(new BigDecimal("1.1")));
0.9
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239153
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vslUsmanпропущено...
решается округлением
решается правильным способом создания BigDecimal
Код: java
1.
2.
3.
4.
bsh % print(new BigDecimal(2.0).subtract(new BigDecimal(1.1)));
0.899999999999999911182158029987476766109466552734375
bsh % print(new BigDecimal("2.0").subtract(new BigDecimal("1.1")));
0.9

+128
Да, есть такое, когда проблемы double переносятся в BigDecimal
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239156
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanкогда проблемы double переносятся в BigDecimal Напомнило 19016384
...
Рейтинг: 0 / 0
Странные числа на выводе программы!
    #39239259
Dmitry56
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, спасибо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Странные числа на выводе программы!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]