[SOLVED] Ошибки в значениях double C#

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
Привет всем! Ребята, кто-нибудь может мне объяснить, что за странные чудеса в логе творятся:
Тип Время Путь Сообщение
2018-12-11 15:04:45.979 1
2018-12-11 15:04:45.979 1,1
2018-12-11 15:04:45.980 1,2
2018-12-11 15:04:45.980 1,3
2018-12-11 15:04:45.980 1,4
2018-12-11 15:04:45.981 1,5
2018-12-11 15:04:45.981 1,6
2018-12-11 15:04:45.982 1,7
2018-12-11 15:04:45.982 1,8
2018-12-11 15:04:45.982 1,9
2018-12-11 15:04:45.983 2
2018-12-11 15:04:45.983 2,1
2018-12-11 15:04:45.983 2,2
2018-12-11 15:04:45.984 2,3
2018-12-11 15:04:45.984 2,4
2018-12-11 15:04:45.984 2,5
2018-12-11 15:04:45.985 2,6
2018-12-11 15:04:45.985 2,7
2018-12-11 15:04:45.986 2,8
2018-12-11 15:04:45.986 2,9
2018-12-11 15:04:45.986 3
2018-12-11 15:04:45.987 3,1
2018-12-11 15:04:45.987 3,2
2018-12-11 15:04:45.987 3,3
2018-12-11 15:04:45.988 3,4
2018-12-11 15:04:45.988 3,5
2018-12-11 15:04:45.988 3,6
2018-12-11 15:04:45.989 3,7
2018-12-11 15:04:45.989 3,8
2018-12-11 15:04:45.990 3,9
2018-12-11 15:04:45.990 4
2018-12-11 15:04:45.990 4,1
2018-12-11 15:04:45.991 4,2
2018-12-11 15:04:45.991 4,3
2018-12-11 15:04:45.991 4,4
2018-12-11 15:04:45.992 4,5
2018-12-11 15:04:45.992 4,6
2018-12-11 15:04:45.993 4,7
2018-12-11 15:04:45.993 4,8
2018-12-11 15:04:45.993 4,9
2018-12-11 15:04:45.994 5
2018-12-11 15:04:45.994 5,1
2018-12-11 15:04:45.994 5,2
2018-12-11 15:04:45.995 5,3
2018-12-11 15:04:45.995 5,4
2018-12-11 15:04:45.996 5,5
2018-12-11 15:04:45.996 5,6
2018-12-11 15:04:45.996 5,7
2018-12-11 15:04:45.997 5,8
2018-12-11 15:04:45.997 5,9
2018-12-11 15:04:45.997 6
2018-12-11 15:04:45.999 6,1
2018-12-11 15:04:46.000 6,19999999999999
2018-12-11 15:04:46.000 6,29999999999999
2018-12-11 15:04:46.000 6,39999999999999
2018-12-11 15:04:46.001 6,49999999999999
2018-12-11 15:04:46.001 6,59999999999999
2018-12-11 15:04:46.002 6,69999999999999
2018-12-11 15:04:46.002 6,79999999999999
2018-12-11 15:04:46.003 6,89999999999999
2018-12-11 15:04:46.003 6,99999999999999
2018-12-11 15:04:46.003 7,09999999999999
2018-12-11 15:04:46.004 7,19999999999999
2018-12-11 15:04:46.004 7,29999999999999
2018-12-11 15:04:46.004 7,39999999999999
2018-12-11 15:04:46.005 7,49999999999999
2018-12-11 15:04:46.005 7,59999999999999
2018-12-11 15:04:46.006 7,69999999999999
2018-12-11 15:04:46.006 7,79999999999999
2018-12-11 15:04:46.006 7,89999999999999
2018-12-11 15:04:46.007 7,99999999999999
2018-12-11 15:04:46.007 8,09999999999999
2018-12-11 15:04:46.008 8,19999999999999
2018-12-11 15:04:46.008 8,29999999999999
2018-12-11 15:04:46.008 8,39999999999999
2018-12-11 15:04:46.009 8,49999999999999
2018-12-11 15:04:46.009 8,59999999999999
2018-12-11 15:04:46.009 8,69999999999999
2018-12-11 15:04:46.010 8,79999999999999
2018-12-11 15:04:46.010 8,89999999999999
2018-12-11 15:04:46.011 8,99999999999999
2018-12-11 15:04:46.011 9,09999999999999
2018-12-11 15:04:46.011 9,19999999999999
2018-12-11 15:04:46.012 9,29999999999998
2018-12-11 15:04:46.012 9,39999999999998
2018-12-11 15:04:46.012 9,49999999999998
2018-12-11 15:04:46.013 9,59999999999998
2018-12-11 15:04:46.013 9,69999999999998
2018-12-11 15:04:46.014 9,79999999999998
2018-12-11 15:04:46.014 9,89999999999998
2018-12-11 15:04:46.014 9,99999999999998
2018-12-11 15:04:46.015 Выполнение кода C# действия id: 5ee642d3-8af0-46c4-86cc-da966f6aa8f5 группы действий id: 7396599e-9c71-4b8c-8be9-836734694ff4 Результат: 5,1
Объясню данный лог: есть переменная со значение 0. В цикле к ней прибавляется одна десятая целой, то есть 0.1. И всё идёт хорошо до тех пор, пока не дохоит до значения 6.1, после чего вместо 6.2 мы видим 6.1 со множеством девяток и восьмёркой на конце. Что за фигня? Почему так?
И второй момент - в конце стоит проверка на взятие первой строки из списка с этими чилами, и исходя из моего кода, первой строкой в списке должна была быть строка со значением 5 ровно, а не 5.1, как в логе. То есть условие, при которой первая строка попадает в список, это когда первая переменная будет больше или равна второй, не выполняется.
Итого мы имеем две ошибки, понять природу которых я не в силах. Объясните пожалуйста, кто знает, что не так здесь.
Прилагаю код, который так отрабатывает у меня:
PHP:
double a = 0;
double b = 5;
double c = 10;
List<double> desyatichList = new List<double>();
while (a <= 10) {
project.SendInfoToLog(a.ToString());
if (a >= b && a <= c)    desyatichList.Add(a);
a = a + 0.1;
}
double d =  desyatichList[0];
return d;
 

julius

Client
Регистрация
07.11.2018
Сообщения
166
Благодарностей
26
Баллы
28
Ну в интернете есть такой вариант:
"Есть тип Decimal. Можете попробовать его. У него точность побольше будет чем у double"
Еще как вариант, можно умножить все числа на 10 или на 100 и в момент .Add делить на 10 или на 100.
 
  • Спасибо
Реакции: avtostopshik

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
756
Благодарностей
135
Баллы
43
Ну в интернете есть такой вариант:
"Есть тип Decimal. Можете попробовать его. У него точность побольше будет чем у double"
Еще как вариант, можно умножить все числа на 10 или на 100 и в момент .Add делить на 10 или на 100.
Интересные оба варианта, спасибо.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)