Как ограничить количество знаков после запятой в c

от admin

Ограничить поплавок двумя знаками после десятичной точки в C++

В этом посте будет обсуждаться, как ограничить значение с плавающей запятой двумя знаками после десятичной точки в C++.

1. Использование round() функция

Существует несколько вариантов ограничения числа с плавающей запятой двумя знаками после запятой, в зависимости от того, хотите ли вы округлить число до ближайшего, округлить в меньшую или большую сторону. Например, следующий код округляет число с плавающей запятой до двух знаков после запятой.

Задание количества знаков после запятой

Есть переменная типа double d=0,12312332453. Подскажите, пожалуйста — как задать вывод в консоли заданного количества знаков после запятой?

Например, с помощью форматирования строки через String.Format(string, object). Console.WriteLine(string, object) то же самое, только сразу в консоль показывает.

Следующий код показывает число и 2 знака после запятой:

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как ограничить количество знаков после запятой в c

При выводе строк в консоли с помощью метода Console.WriteLine для встраивания значений в строку мы можем применять форматирование вместо конкатенации:

В строке «Имя: <0>Возраст: <1>» на место <0>и <1>затем будут вставляться в порядке следования значения переменныйх name и age

То же самое форматирование в строке мы можем сделать не только в методе Console.WriteLine, но и в любом месте программы с помощью метода string.Format :

Метод Format принимает строку с плейсхолдерами типа <0>, <1>и т.д., а также набор аргументов, которые вставляются на место данных плейсхолдеров. В итоге генерируется новая строка.

Спецификаторы форматирования

В методе Format могут использоваться различные спецификаторы и описатели, которые позволяют настроить вывод данных. Рассмотрим основные описатели. Все используемые форматы:

Задает формат денежной единицы, указывает количество десятичных разрядов после запятой

Целочисленный формат, указывает минимальное количество цифр

Экспоненциальное представление числа, указывает количество десятичных разрядов после запятой

Формат дробных чисел с фиксированной точкой, указывает количество десятичных разрядов после запятой

Задает более короткий из двух форматов: F или E

Также задает формат дробных чисел с фиксированной точкой, определяет количество разрядов после запятой

Задает отображения знака процентов рядом с число, указывает количество десятичных разрядов после запятой

Шестнадцатеричный формат числа

Форматирование валюты

Для форматирования валюты используется описатель «C»:

Число после описателя указывает, сколько чисел будет использоваться после разделителя между целой и дробной частью. При выводе также добавляется обозначение денежного знака для текущей культуры компьютера. В зависимости от локализации текущей операционной системы результат может различаться. Также обратите внимание на округление в первом примере.

Форматирование целых чисел

Для форматирования целочисленных значение применяется описатель «d»:

Число после описателя указывает, сколько цифр будет в числовом значении. Если в исходном числе цифр меньше, то к нему добавляются нули.

Форматирование дробных чисел

Для форматирования дробны чисел используется описатель F, число после которого указывает, сколько знаков будет использоваться после разделителя между целой и дробной частью. Если исходное число — целое, то к нему добавляются разделитель и нули.

Формат процентов

Описатель «P» задает отображение процентов. Используемый с ним числовой спецификатор указывает, сколько знаков будет после запятой:

Настраиваемые форматы

Используя знак #, можно настроить формат вывода. Например, нам надо вывести некоторое число в формате телефона +х (ххх)ххх-хх-хх:

Метод ToString

Метод ToString() не только получает строковое описание объекта, но и может осуществлять форматирование. Он поддерживает те же описатели, что используются в методе Format:

Читать:
Программа которая отвечает на вопросы

Интерполяция строк

Интерполяция строк призвана упростить форматирование строк. Так, перепишем пример с выводом значений переменных в строке:

Знак доллара перед строкой указывает, что будет осуществляться интерполяция строк. Внутри строки опять же используются плейсхолдеры <. >, только внутри фигурных скобок уже можно напрямую писать те выражения, которые мы хотим вывести.

Интерполяция по сути представляет более лаконичное форматирование. При этом внутри фигурных скобок мы можем указывать не только свойства, но и различные выражения языка C#:

Также внутри фигурных скобок можно выполнять более сложные выражения, например, вызывать методы:

Уже внутри строки можно применять форматирование. В этом случае мы можем применять все те же описатели, что и в методе Format . Например, выведем номер телефона в формате +x xxx-xxx-xx-xx:

Ограничение числа double до 3 знаков после запятой

В двойных числах нет десятичных знаков — они не основаны на десятичных цифрах. Вы можете получить «ближайшее двойное значение к текущему значению при усечении до трех десятичных цифр», но это все равно не будет точно таким же. Вам лучше использовать decimal .

Сказав это, если проблема заключается только в том, как округление происходит, вы можете использовать Math.Truncate(value * 1000) / 1000; который май делай что хочешь. (Вы не хотите округление вообще, судя по звукам.) Это все еще потенциально «хитроумно», так как результат все равно не будет иметь просто три десятичных разряда. Однако если вы проделали то же самое с десятичным числом, оно бы Работа:

РЕДАКТИРОВАТЬ: Как указал Л.Бушкин, вы должны быть ясны между усечением для дисплей цели (что обычно можно сделать в спецификаторе формата) и усечение для дальнейших вычислений (в этом случае должно работать вышеуказанное).

Если «усечение» предназначено только для отображения, это может быть достигнуто путем преобразования значения в строковое представление. Это сохранит точность и позволит избежать некоторых ошибок, связанных с попыткой точного манипулирования десятичными числами числа с плавающей запятой. — Л.Бушкин

@LBushkin: Верно. Это зависит от того, что требуется. Иногда компании действительно хотят, чтобы вычисления выполнялись с усеченными значениями в каждой точке . а иногда только для отображения. Хорошо отметить. — Джон Скит

@JonSkeet по умолчанию обрезается до 3 знаков после запятой? — Эхсан Саджад

@ EʜsᴀɴSᴀᴊᴊᴀᴅ: Нет, я не уверен, почему вы так думаете. — Джон Скит

@ EʜsᴀɴSᴀᴊᴊᴀᴅ: это умножение на 1000, усечение до целого числа и деление на 1000. Если бы вместо этого было 10000 м, это было бы до 4 знаков после запятой. — Джон Скит

Я не могу придумать причину явной потери точности за пределами отображения. В этом случае просто используйте форматирование строки.

Мне это нужно, потому что я сопоставляю значения из файла XML с теми, которые хранятся в БД. Оба источника заполняются разными сторонами. Тот, который заполняет Db, предпочитает не заполнять ничего, превышающего 3 десятичных знака, в то время как XML-файл часто может иметь до 8 десятичных знаков — хбонез

@StevenSudit И еще один возможный вариант использования, такой как мой, — это когда у меня есть поле DB, которое может принимать только 10 символов, но в форме есть поле lb -> kg, где выполняется вычисление и может давать число> 10 символов. Иногда вам просто нужно несколько значащих цифр и не нужно усекать или округлять, но есть ограничения на количество цифр, которые вы можете сохранить. Поэтому я бы отрицательно поставил под сомнение этот вариант использования, поскольку он очень распространен при хранении чисел в поле БД, а не при голосовании за него. К счастью, у него есть полезный ответ, поэтому я буду голосовать за него. — vapcguy

Похожие статьи