Как в C# вывести число с определенным количеством знаков после запятой?

Здрасьте, я ещё совсем новичок в сфере программирования, но хотелось бы оставить свой ответ на случай, если у такого же неопытного юнца, как я, возникнет какая-то схожая проблема
Перед выводом, после всех исчислений, можно воспользоваться таким методом:
double c = Math.Round(c, 2);
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- C#
- +1 ещё
Что делать, если объект проваливается, когда я пытаюсь его поставить туда куда смотрю?
- 1 подписчик
- 5 часов назад
- 20 просмотров
как ограничить число знаков после запятой в типе float (Си)?
Тип float всегда с одним и тем же количество знаков. А выводить на экран можно с любым количеством знаков и в любом формате — это зависит от того, какой функцией выводить, у каждой свои параметры.
printf(«%.3f», float_val);
выводит три знака после запятой
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.
Количество знаков после запятой c++
Если выводить с помощью СИшного printf(«%.9f», res) — выводится 4.000000000, 1.500000000 При выводе с помощью std. cout
Отслеживать
219k 15 15 золотых знаков 120 120 серебряных знаков 230 230 бронзовых знаков
задан 17 дек 2019 в 17:46
13 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
Ничего не понял. 8./2. — это и есть 4.000000000 , а 3./2. — это и есть 1.500000000 . В чем проблема?
17 дек 2019 в 20:16
В постановке задачи. Мне нужен именно такой формат вывода, который я описал.
17 дек 2019 в 23:30
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
cout
2.714285714
Смотрите всякие разности форматирования тут.
Отслеживать
ответ дан 17 дек 2019 в 17:50
219k 15 15 золотых знаков 120 120 серебряных знаков 230 230 бронзовых знаков
Для 19 и 7 Ваш вариант сработал. Но есть 2 проблемы: при 8.0/2.0 выводит 4, а мне нужен вывод 4.0; при, например, 40.0/3.0 выводит только 8 значений после запятой
17 дек 2019 в 18:04
Ну поднимите точность - она учитывает все знаки.
17 дек 2019 в 18:12
- Деление целочисленных дает целочисленное, остаток отсекается.
- По умолчанию вещественные имеют тип данных double , в спецификации формата printf() он указывается как %lf .
printf("%.9f",19.0F/7.0F); // float -> double printf("%.9lf",19.0/7.0); // double -> double printf("%.9Lf",19.0L/7.0L); // long double -> long double
Подробнее можно почитать тут и тут.
Отслеживать
ответ дан 17 дек 2019 в 17:48
1,947 5 5 серебряных знаков 24 24 бронзовых знака
неверно. в printf double — это как раз %f , а %Lf — это уже long double . Спецификатора формата %lf в принципе нет.
17 дек 2019 в 19:10
преобразовывать в double . и да для scanf 'а значения спецификаторов отличаются. это один из старых квирков Си.
17 дек 2019 в 19:31
@Πανμέτρονάριστον Можно тоже как %f . При передаче float в сишный . -параметр он автоматически преобразуется в double . См. en.cppreference.com/w/cpp/io/c/fprintf
17 дек 2019 в 19:31
@Fat-Zer Посмотрел cppreference. Там написано, что %lf есть (добавили в C++11/C99), и не отличается от %f (оба могут и в float и double ).
17 дек 2019 в 19:34
@HolyBlackCat, да. моя ошибка. %lf — это тоже что и %f по всем стандартам.
17 дек 2019 в 19:47
Если выводить с помощью СИшного printf("%.9f", res)
Просто используй спецификатор %g:
printf("%.9g", 19./7); // 2.71428571 printf("%.9g", 3./2); // 1.5 printf("%.9g", 8./2); // 4 printf("%.9g", sqrt(10101)); //100.503731
Стоит помнить, что это 9 значащих цифр, а не 8 цифр после точки. Если нужно именно последнее, то можно сделать как-то так:
double res = sqrt(10101); printf("%.*g\n", 8 + 1 + (int)log10(res), res); // 100.50373127
Как ограничить число знаков после запятой?

надо ограничить число знаков до 4-х после запятой. В x[i]. вот программа, а вівод x[i] конечно в конце:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
#include #include #include void main() { int colPos, rowPos; int i, j, k, razm; double max; double temp; int m_nCols; int m_nRows; double** array; double* parray; unsigned int* ListVar; double* x; cout"введите количество уравнений:\n"; cin>>razm; cout"введите расширенную матрицу:\n"; m_nRows=razm; m_nCols=m_nRows+1; parray=new double[m_nRows*m_nCols]; array=new double*[m_nRows]; for (i=0; im_nRows; i++) { *(array+i)=parray+i*m_nCols; } ListVar=new unsigned int[m_nCols-1]; for (j=0; jm_nCols-1; j++) ListVar[j]=j+1; x=new double[razm]; for (i=0; im_nRows-1; i++) x[i]=i+1; for (i=0; irazm; i++) for (j=0;j(razm+1); j++) cin>>array[i][j]; for (k=0; km_nRows-1; k++) { colPos=rowPos=k; max=array[k][k]; for (i=k; im_nRows; i++) for (j=k+1; jm_nCols-1; j++) if (abs(array[i][j])>max) { max=array[i][j]; rowPos=i; colPos=j; } for (i=0; im_nRows; i++) { temp=array[i][k]; array[i][k]=array[i][colPos]; array[i][colPos]=temp; } for (j=0; jm_nCols; j++) { temp=array[k][j]; array[k][j]=array[rowPos][j]; array[rowPos][j]=temp; } temp=ListVar[k]; ListVar[k]=ListVar[colPos]; ListVar[colPos]=temp; for (j=m_nCols-1; j>=0; j--) { array[k][j]/=array[k][k]; } for (j=0; jm_nCols; j++) array[k][j]; for (i=k+1; im_nRows; i++) for (j=m_nCols-1; j>=0; j--) array[i][j]-=array[k][j]*array[i][k]; } double s=0; x[m_nRows-1]=array[m_nRows-1][m_nCols-1]/array[m_nRows-1][m_nCols-2]; for (i=m_nRows-2; i>=0; i--) { s=0; for (k=i+1; km_nRows; k++) s+=array[i][k]*x[k]; x[i]=array[i][m_nCols-1]-s; } cout"\nрешение системы:\n"; for (i=0; im_nRows; i++) cout"X"ListVar[i]"="x[i]endl; }