Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 20.10.2020
Сообщений: 7

Как сделать так чтобы выводились все числа после запятой? Вывести больше 17 значащих цифр

10.11.2020, 13:06. Показов 4405. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
double x = 29178301791.20042003, y, c, c1, z1, z2, k;
Console.WriteLine("x = " + x.ToString());
Миниатюры
Как сделать так чтобы выводились все числа после запятой? Вывести больше 17 значащих цифр  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2020, 13:06
Ответы с готовыми решениями:

Как в VB сделать так, чтобы, если у юзера больше одного мыла, то они выводились бы в столбик в ТЕХТ'е?
Есть база, в ней две таблицы, где 1) FRIEND с полями: id_user, user_name 2) EMAIL, с полями: id, id_user1, email. В полях FRIEND – id_user...

Как сделать больше цифр после запятой
Есть консольная программа вычисляющая sqrt: #include <iostream> #include <cmath> using namespace std; int main() { ...

Как сделать так, чтобы при клике на рубрику выводились все записи, что в этой рубрике
На страницу выводятся рубрики. Как сделать так, чтобы при клике на рубрику выводились все записи, что в этой рубрике?

11
1595 / 600 / 185
Регистрация: 05.12.2015
Сообщений: 970
10.11.2020, 15:21
не получится, потому что длина ограничена в 16 позиций
если поставить точку останова и посмотреть значение x, то оно будет таким как при печати, то есть цифры после 16-ой позиции обрезаются
надо более широкий тип, например decimal

decimal x = 29178301791.20042003m;
0
0 / 0 / 0
Регистрация: 20.10.2020
Сообщений: 7
10.11.2020, 15:42  [ТС]
У одногруппника на с++ выводятся числа вот как с типом double. Хотя там вроде такие же ограничения по типу данных
Миниатюры
Как сделать так чтобы выводились все числа после запятой? Вывести больше 17 значащих цифр  
0
0 / 0 / 0
Регистрация: 20.10.2020
Сообщений: 7
10.11.2020, 15:55  [ТС]
proa33, У одногруппника на с++ выводятся числа вот как с типом double. Хотя там вроде такие же ограничения по типу данных.
У меня только "y" получился длинным в выводе
Миниатюры
Как сделать так чтобы выводились все числа после запятой? Вывести больше 17 значащих цифр   Как сделать так чтобы выводились все числа после запятой? Вывести больше 17 значащих цифр  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
10.11.2020, 16:11
Цитата Сообщение от KailDizh Посмотреть сообщение
У одногруппника на с++ выводятся числа вот как с типом double. Хотя там вроде такие же ограничения по типу данных
Структура Double
DoubleТип данных хранит значения с плавающей запятой двойной точности в 64-разрядном двоичном формате, как показано в следующей таблице.
ПРЕДСТАВЛЕНИЕ И ТОЧНОСТЬ С ПЛАВАЮЩЕЙ ТОЧКОЙ
Отделение Bits
Значащим или мантисса 0-51
Показатель степени 52-62
Знак (0 = положительный, 1 = отрицательный) 63
Обратите внимание, что это различие очевидно только в том случае, если мы отображаем два Double значения с помощью строки стандартного числового формата R, которая при необходимости отображает все 17 знаков точности, поддерживаемые Double типом.
Если вам нужно больше значащих цифр, то это надо явно указать в формате вывода.

Все числа с плавающей запятой также имеют ограниченное количество значащих цифр, что также определяет, насколько точное значение числа с плавающей запятой приблизительно равно вещественному числу. DoubleЗначение имеет длину до 15 десятичных разрядов, хотя для внутренних целей поддерживается не более 17 цифр.
Теоретически можно подобрать такое двоичное число, которое можно записать в double, но для точного вывода потребует белее 17 десятичных разрядов.
Допустим, к таким числам относятся отрицательные степени двойки большие 17.

Практического значения это не имеет, так как для человеческого представления в интерфейсе, ошибки округления будут всё равно больше чем 10-17.
Если требуется большая ДЕСЯТИЧНАЯ точность, то следует использовать тип decimal, как выше написал proa33.
Он даст десятичную точность порядка 10-29 - 10-30.
Если нужна ещё большая точность, то придётся использовать какие-то производные типы.


C# язык нацеленный, в первую очередь, на взаимодействие с пользователем.
Поэтому при преобразовании в строковое представление, автоматически пытается определить наиболее удобную форму для человека.
В С++ такой задачи не стоит.
Он выводит число полностью, но по сути, все знаки после 17-го - это ошибки округления и вычислений.
1
0 / 0 / 0
Регистрация: 20.10.2020
Сообщений: 7
10.11.2020, 16:20  [ТС]
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если вам нужно больше значащих цифр, то это надо явно указать в формате вывода.
Да мне нужно больше значащих чисел. Суть задания в ошибках при работе с вещественными числами. Как это явно указать в формате вывода?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
10.11.2020, 16:36
Лучший ответ Сообщение было отмечено KailDizh как решение

Решение

Цитата Сообщение от KailDizh Посмотреть сообщение
. Суть задания в ошибках при работе с вещественными числами.
Дело в том, что ошибки возникают уже при записи из десятичной в двоичную форму.
Для отлова таких ошибок, вам надо проводить вычисления в double типе и второй раз в типе с большой точностью.
И потом сравнивать их результаты между собой.

Что-то типа такого:
C#
1
2
3
4
5
6
7
            double x = 29178301791.20042003;
            decimal xD = 29178301791.20042003m;
            decimal eps = xD - (decimal)x;
 
            Console.WriteLine($"Double = {x}");
            Console.WriteLine($"Decimal = {xD}");
            Console.WriteLine($"Eps = {eps}");
Добавлено через 8 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Дело в том, что ошибки возникают уже при записи из десятичной в двоичную форму.
Допустим, десятичное число "0.2" невозможно записать в double без ошибки.
1
1595 / 600 / 185
Регистрация: 05.12.2015
Сообщений: 970
10.11.2020, 18:23
Цитата Сообщение от KailDizh Посмотреть сообщение
Хотя там вроде такие же ограничения по типу данных
в C++ есть тип long double с разрядностью до 16 байт
в C# тип double имеет разрядность 8 байт
открой наконец справку в студии и посмотри описание double, где написано:
Точность 15-16 знаков
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
10.11.2020, 19:16
Цитата Сообщение от proa33 Посмотреть сообщение
в C++ есть тип long double с разрядностью до 16 байт
В Net аналог есть?
0
619 / 399 / 187
Регистрация: 28.11.2019
Сообщений: 867
10.11.2020, 19:50
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В Net аналог есть?
Если мне не изменяет память, то стандарт c++ просто требует от long double не меньшей точности чем у double, при этом некоторые компиляторы воспринимают long double синонимом double. Long double может занимать 8, 12 или 16 байт, ближайший аналог в c# получается decimal.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16130 / 11254 / 2888
Регистрация: 21.04.2018
Сообщений: 33,086
Записей в блоге: 2
10.11.2020, 20:01
Цитата Сообщение от randok Посмотреть сообщение
ближайший аналог в c# получается decimal.
Не всякий double поместится в decimal, как по диапазону, так и по точности.
double в котором у мантиссы только в последнем разряде единица в decimal не перевести.

Добавлено через 2 минуты
Для целых есть BigInteger, а вот для BigDouble мне что-то не попадалось.
Хотя, я думаю потребность в научных расчётах есть, и наверное, есть какая-то библиотека.
Но не Net'овская.

Добавлено через 1 минуту
Как осуществить BigDouble?

Добавлено через 2 минуты
Аналог BigInteger для вещественных чисел
0
619 / 399 / 187
Регистрация: 28.11.2019
Сообщений: 867
10.11.2020, 20:17
Цитата Сообщение от Элд Хасп Посмотреть сообщение
а вот для BigDouble мне что-то не попадалось
В яве например есть такой тип - BigDecimal. А в c# завезли только BigInteger. Либо пилить свое, либо попробовать эти реализации:
https://www.nuget.org/packages?q=BigDecimal
Если товарищу нужно просто очень много знаков после запятой (больше, чем предоставляет double), то можно использовать decimal. А так, к примеру, тот же компилятор c++ от MS считает, что long double это то же самое, что double https://docs.microsoft.com/ru-... ype-ranges
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2020, 20:17
Помогаю со студенческими работами здесь

Точное количество значащих цифр после запятой с++
Подскажите, пожалуйста, как получить точное количество значащих цифр после запятой? Изначальное число неизвестно, пользователь вводит...

Сделать так, чтобы в программе числа выводились в строку, а не в столбец
Как сделать так, чтобы в этой программе числа выводились в строку, а не в столбец. program ggg; const n=3; m=3; var...

Как сделать так чтобы в tetxbox1 выводились числа от одного до 175 но при условии того что я должен нажать 175 раз на
Как сделать так что бы в tetxboxs1 выводиллись числа от одного до 175 но при условий того что я должен нажать 175 раз на кнопку и ввывод...

Как сделать так, чтобы выводились заголовки столбцов в отчете?
Есть экспорт в Excel, но он выводит отчет без заголовков столбцов. Как сделать так, чтобы заголовки столбцов тоже выводились в отчете. ...

Как сделать так чтобы значения в списке выводились правильно
В задаче нужно ввести список 10 студентов и их оценки, потом если средний бал больше 3 , то вывести номер и средний бал студента....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru