Круглый двойной в двух десятичных разрядах в C #?


258

Я хочу округлить двойное значение в два знака после запятой в C #, как я могу это сделать?

double inputValue = 48.485;

после округления

inputValue = 48.49;

Related: c # - Как округлить десятичное значение до 2 десятичных знаков (для вывода на страницу)


Обратите внимание, что вы не можете представить все значения с плавающей запятой, используя double, и это может
Liam

Ответы:


479

Это работает:

inputValue = Math.Round(inputValue, 2);

Временное решение для усечения плавания: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Пьеро Альберто

1
Если значение 48,0000. Это не приведет к 48.00. double inputValue = 48.00; inputValue = Math.Round (inputValue, 2); приведет только 48. Любой варкаунд?
user1926138

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
Это на самом деле то, что следует использовать. Большинство операций в банках и т. Д. Выполняется с использованием этого метода (MidpointRounding.AwayFromZero).
MadBoy

41
предполагать, что банки используют двойные числа, страшно, чувак, не используйте приближенные значения для валюты.
Рагги

6
@ raggi Боюсь, что некоторые (банки) делают ... Это могло бы многое объяснить
SparK

4
Да, я верю, что это было то, что было сделано после фильма «Офисное пространство» - округляя доли центов, которые никто не заметит. Полезно быть осторожным, когда нужно произвольно использовать округление.
atconway

1
И как часть сюжета одного из оригинальных фильмов про Супермена очень давно.
Джеймс Вестгейт

25

Вы должны использовать

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.Round

Math.Round округляет значение с плавающей запятой двойной точности до указанного числа дробных цифр.

MidpointRounding

Определяет, как математические методы округления должны обрабатывать число, находящееся посередине между двумя числами.

В основном, функция, приведенная выше, будет принимать ваше входное значение и округлять его до 2 (или любого числа, которое вы укажете) десятичных разрядов. С , MidpointRounding.AwayFromZeroкогда число находится на полпути между двумя другими, оно округляется в сторону ближайшего числа, от нуля. Есть также другая опция, которую вы можете использовать, которая округляет до ближайшего четного числа.


25

Другой простой способ - использовать ToString с параметром. Пример:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Результат:

54.97

19

Используйте Math.Round

value = Math.Round(48.485, 2);

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

1
Однако будьте осторожны с MidpointRounding: «Если значение первой цифры в значении справа от десятичной позиции цифр равно 5, цифра в позиции цифр округляется в большую сторону, если она нечетная, или остается неизменной, если она четная»
Матиас

8

Вы можете попробовать один из ниже. Есть много способов для этого.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

Я использовал четвертый вариант. Запись F6 работала для меня лучше, чем запись 6 нулей ;-)
Морис Климек

2

Используйте интерполированную строку, это создает округленную строку:

var strlen = 6;
$"{48.485:F2}"

Вывод

"48.49"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.