Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122

Как правильно округлять Е числа?

17.03.2022, 23:14. Показов 2436. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот попалось мне число в координатах ( -1,489405E-09 ) , я его округлил -1,48 , вывод неверный (по действиям вижу смещение), неправильно, можете объяснить что за такие Е числа и как их правильно округлять?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2022, 23:14
Ответы с готовыми решениями:

Как лучше округлять числа?
Подскажите как лучше округлять числа. И ещё хотел спросить почему в выражении float ccx=(float)cx/(float)Width; при int...

Как в статистике правильно округлять
Всем добрый день помогите пожалуйста с вот таким заданием как в статистике правильно округлять h = 6570 = ? h = 333 = ? h =...

Как округлять числа в c++
как округлить 1499 до 1000

14
fly
 Аватар для I can
4955 / 4644 / 844
Регистрация: 13.04.2015
Сообщений: 9,840
17.03.2022, 23:31
Лучший ответ Сообщение было отмечено Nebiros как решение

Решение

Цитата Сообщение от Nebiros Посмотреть сообщение
что за такие Е
Экспоненциальная запись

Добавлено через 2 минуты
Экспоненциальная запись числа

Добавлено через 1 минуту
-1,489405E-09 это -0,000000001489405
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
17.03.2022, 23:43  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
-1,489405E-09 это -0,000000001489405
понял теперь как с ними воевать, сначала в строку
C#
1
string s = f.ToString("0.#########################");
ну а дальше обрезаю
C#
1
s = s.Substring(0,4);
и там уже всё как нужно....
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,629
Записей в блоге: 3
17.03.2022, 23:46
Цитата Сообщение от Nebiros Посмотреть сообщение
сначала в строку
Цитата Сообщение от Nebiros Посмотреть сообщение
ну а дальше обрезаю
Математически неверно. Двойка.
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
17.03.2022, 23:54  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Математически неверно. Двойка.
всё правильно теперь получается, раньше у меня из -1,489405E-09 получалось -1,48 при округлении, что приводило к ошибкам, теперь при данном методе это ноль, что уже правильно и работает как нужно...
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,629
Записей в блоге: 3
18.03.2022, 00:12
Nebiros, еще раз...
Математически неверно! Вы преобразовали число в строку, затем обрезали ее (строку) до нужных вам знаков и ее округлили. А то что обрезали - выкинули прямиком в мусорное ведро.
В какую сторону округляли?
По какому правилу?
Какая была старшая "отрезанная" цифра в строке?
Твердая двойка!
Цитата Сообщение от Nebiros Посмотреть сообщение
всё правильно теперь получается
По каким правилам и кто сказал?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.03.2022, 02:13
Цитата Сообщение от Nebiros Посмотреть сообщение
как их правильно округлять?
Округлять или форматировать?
Вы спрашиваете про округление, а код показываете для форматирования.
Для округления есть метод Round в классе Math.
Для форматирования есть стандартные и настраиваемые форматы.
0
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.03.2022, 10:00  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Округлять или форматировать?
Вы спрашиваете про округление, а код показываете для форматирования.
Для округления есть метод Round в классе Math.
Для форматирования есть стандартные и настраиваемые форматы.
мне нужно было именно обрезать, до этого я использовал d = (float)Math.Round(d, 2);, в итоге 1.47666666 превращалось в 1.48 а 147222222 в 1.47, мне нужно было именно обрезать, вот до 2х знаков после запятой, причём эти значения брались из вектора Vector3 а там они float, в итоге я перегонял в double округлял и снова в float, понимаю выглядит всё как полный бред....
Но вот на данный момент мне это решение как раз даёт нужный результат, то есть именно обрезает, а не округляет в какую либо сторону...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.03.2022, 10:46
Цитата Сообщение от Nebiros Посмотреть сообщение
мне нужно было именно обрезать
Обрезать для чего? Для дальнейших вычислений или для вывода на экран?
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.03.2022, 11:29  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Обрезать для чего? Для дальнейших вычислений или для вывода на экран?
И то и другое, дело в том что метод из юнити мне выдаёт массив следования из векторов, потом я вычисляю расстояние между этими векторами, и мне нужно вывести это расстояние в UI панель, а во вторых чтобы это расстояние совпадало с возможным, так как если разница будет хоть в одну сотую то объект не достанет до точки направления, и т.д....

Добавлено через 1 минуту
И да, дальше я строку вывожу в UI, а для вычислений перегоняю в float....
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.03.2022, 12:01
Цитата Сообщение от Nebiros Посмотреть сообщение
если разница будет хоть в одну сотую то объект не достанет до точки направления
В этом случае для вычислений округляйте до нужного количества десятичных разрядов, используя вышеуказанный метод Round, а в строку конвертируйте только при выводе в UI, используя форматирование.
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.03.2022, 15:00  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
В этом случае для вычислений округляйте до нужного количества десятичных разрядов, используя вышеуказанный метод Round
так он в ближайшую сторону, а мне в меньшую нужно, а такого метода я не нашел, то есть даже если число будет 1.799999999999999999 мне нужно 1.79 а не 1.80, вот у меня так нужно по моей механике...
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.03.2022, 18:01
Цитата Сообщение от Nebiros Посмотреть сообщение
так он в ближайшую сторону, а мне в меньшую нужно
В меньшую или в сторону нуля?
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
18.03.2022, 18:06  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
В меньшую или в сторону нуля?
Просто обрезать, то есть
HTML5
1
2
3
5.577777777 => 5.57
5.549999999 => 5.54
5.512222222 => 5.51
то есть не важно что там дальше за сотыми, просто обрезка до сотых...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.03.2022, 18:17
Лучший ответ Сообщение было отмечено Nebiros как решение

Решение

Цитата Сообщение от Nebiros Посмотреть сообщение
Просто обрезать
C#
1
2
3
int factor = 100;
double d = 5.577777777;
d = Math.Truncate(d * factor) / factor;
Но вообще учитывайте, что вычисления с float/double в большинстве случаев неточны, включая округление и обрезание.
Если вам это для вычислений, то раз нужна точность в два десятичных разряда — считайте равными любые два значения, различающиеся по модулю меньше, чем на 0.01
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2022, 18:17
Помогаю со студенческими работами здесь

Как округлять числа?
Подскажите пожалуйста как можно округлить число например 5,66666666 до числа 5,6 или 5,7, т.е. чтобы после запятой был всего один знак.

MSC 51, как округлять числа
Собственно вопрос , как округлить число в asm, среда программирования keil

Как округлять все числа в столбце кратно 10 в большую сторону
Здравствуйте! А как округлять все числа в столбце кратно 10 в большую сторону? например есть 64,24 надо 70 и т.п.?

Не округлять числа в некоторых случаях
Всем доброе время суток ! Относительно способов округления существует стандарт IEEE 754, арифметическое округлениу, бухгалтерское...

Как округлять, скажим до 0,001?
Как округлять, скажим до 0,001?


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru