Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
1

Как ограничить размер переменной типа double?

09.07.2017, 15:37. Показов 2402. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Когда я пытаюсь найти квадратный корень любого числа через класс Math, то выходит число с очень большим кол-вом знаком после запятой. И из-за этого срабатывает исключение. Как исправить?
Код на всякий случай -
C#
1
2
double _dbl = Convert.ToDouble(_TotalEnergy);
_dbl = Math.Sqrt(_dbl);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2017, 15:37
Ответы с готовыми решениями:

Как сгенерировать случайное число типа я double имея на входе 2 числа типа double - минимальное и максимальное
Например: public class ExtendedRandom : Random { public ExtendedRandom() ...

Вызов переменной типа int и типа double из нескольких форм
У меня такой случай: мне нужно из вызвать переменные типа double (double RDW = 0.0; RDW =...

Передача переменной типа double из c# в переменную типа float в SQL
Здравствуйте, имеется проблема с передачей данных из кода c# в бд SQL Имеется переменная типа...

Ошибка в переменной типа double
Не могу понять в чем проблема делаю такие вычисления #include <iomanip> summ5=0;...

5
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
09.07.2017, 15:43 2
Jesterru, какое исключение? В какой именно ситуации? Округлять число до нужной точности пробовал делать?
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
09.07.2017, 15:49  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Округлять число до нужной точности пробовал делать?
Я и подумал, что это решение. Но как? Исключение - переполнение переменной типа double
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
09.07.2017, 15:55 4
Jesterru, раз возникает переполнение, то нужно не ограничивать а наоборот "расширять". Но прежде чем давать советы хочется точно понять что происходит. Пример кода для вопроизведения исключения можешь показать? Если исключение возникает в коде из первого сообщения, то расскажи какой тип у переменной _TotalEnergy и какое и нее значение.
0
3 / 2 / 2
Регистрация: 19.06.2016
Сообщений: 299
09.07.2017, 16:01  [ТС] 5
Цитата Сообщение от OwenGlendower Посмотреть сообщение
то расскажи какой тип у переменной _TotalEnergy и какое и нее значение.
Тип - Decimal. Значение - зависит от входных данных. Когда значение маленькое, то все норм. Но когда значение достигает больших значений (Программа высчитывает по формулам энергию тел при субсветовых скоростях), то исключение выскакивает. Само исключение для переменной _dbl, "Значение было недопустимо малым или недопустимо большим для double"

Добавлено через 1 минуту
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
                    decimal _Mass, _Velocity, _TotalEnergy;
                    int _C = 229792459;
 
                    Console.Clear();
                    Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ","):");
                    Console.WriteLine("Масса (КГ) :");
                    _Mass = Convert.ToDecimal(Console.ReadLine());
                    Console.Clear();
                    Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ","):");
                    Console.WriteLine("Масса = " + _Mass + " КГ");
                    Console.WriteLine("Скорость (М/С) :");
                    _Velocity = Convert.ToDecimal(Console.ReadLine());
                    Console.Clear();
                    Console.WriteLine("Сколько потребуется для разгона энергии (дробные числа через ","):");
                    Console.WriteLine("Масса = " + _Mass + " КГ");
                    Console.WriteLine("Скорость = " + _Velocity + " М/С");
 
                    _TotalEnergy = 1 - ((_Velocity * _Velocity) / (_C * _C));
                    double _dbl = Convert.ToDouble(_TotalEnergy);
                    _dbl = Math.Sqrt(_dbl);
                    _TotalEnergy = Convert.ToDecimal(_dbl);
                    _TotalEnergy = 1 / _TotalEnergy;
                    _TotalEnergy = _TotalEnergy - 1;
                    _TotalEnergy = _TotalEnergy * (_C * _C);
                    _TotalEnergy = _TotalEnergy * _Mass;
 
                    Console.WriteLine("================================");
                    Console.WriteLine("Для разгона объекта массой " + _Mass + " кг до скорости " + _Velocity + " м/с потребуется\n" + _TotalEnergy + " Дж");
                    Console.ReadKey();
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
09.07.2017, 16:21 6
Jesterru, проблема в расчете _TotalEnergy = 1 - ((_Velocity * _Velocity) / (_C * _C)) дает отрицательное число. Корень из отрицательного числа это NaN - Not A Number. Поэтому далее и происходит ошибка при преобразовании. Решается путем замены типа переменной _C на long и всех decimal на double.
0
09.07.2017, 16:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2017, 16:21
Помогаю со студенческими работами здесь

Как ограничить размер ListBox размером окна (расползается на весь размер)?
Вроде простой вопрос, а что то закопался. Есть Page, в ней Grid, в нем ListBox Так вот когда...

Теряется точность переменной типа double
Вот код: double StepC = 0.001, g_C; for ( double c = StepC; c <= 3; c += StepC )...

Странный баг с переменной типа double**
Короче я вообще не пойму в чем проблема, этот код: void __fastcall TForm1::BitBtn1Click(TObject...

Присваивание переменной типа double строки
Возможно ли без создания новой переменной?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru