При отображении значения десятичной дроби, имеющегося в данный момент .ToString()
, точные значения равны 15 десятичным знакам, и, поскольку я использую его для представления долларов и центов, я хочу, чтобы выходные данные составляли только 2 десятичных знака.
Я использую вариант .ToString()
для этого?
Decimal
иDouble
typeToString
принимает аргумент для форматирования. Попробуйте сначала преобразовать ваше значение в десятичное / двойное.Я знаю, что это старый вопрос, но я был удивлен, увидев, что никто, кажется, не опубликовал ответ, который;
Вот что я бы использовал:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
источник
Это будет:
23.456
→23.46
23
→23.00
;12.5
→12.50
Идеально подходит для отображения валюты.
Ознакомьтесь с документацией по ToString ("F") (спасибо Джону Шнайдеру).
источник
.
может быть заменено на,
основе культуры. Вы должны указатьCultureInfo.InvariantCulture
второй аргумент, чтобы отключить это.Если вам просто нужно это для отображения, используйте строку. Формат
http://www.csharp-examples.net/string-format-double/
«M» - это десятичный суффикс. О десятичном суффиксе:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
источник
Дано десятичное число d = 12,345; выражения d.ToString ("C") или String.Format ("{0: C}", d) дают $ 12,35 - обратите внимание, что используются текущие настройки валюты культуры, включая символ.
Обратите внимание, что «C» использует количество цифр из текущей культуры. Вы всегда можете переопределить значение по умолчанию, чтобы добиться необходимой точности с помощью
C{Precision specifier}
лайкаString.Format("{0:C2}", 5.123d)
.источник
Если вы хотите, чтобы он был отформатирован запятыми, а также десятичной точкой (но без символа валюты), например, 3 456 789,12 ...
источник
Уже есть два ответа с высокими оценками, которые относятся к Decimal.Round (...), но я думаю, что требуется немного больше объяснений - потому что есть неожиданное важное свойство Decimal, которое не очевидно.
Десятичное число «знает», сколько десятичных разрядов оно основало на том, откуда оно взято.
Например, следующее может быть неожиданным:
Выполнение тех же операций с
Double
не даст десятичных знаков ("25"
) для каждого из вышеперечисленных.Когда вы хотите, чтобы от десятичного до двух десятичных разрядов, вероятность была около 95%, потому что это валюта, и в этом случае это, вероятно, хорошо для 95% времени:
Или в XAML вы просто используете
{Binding Price, StringFormat=c}
Один случай, с которым я столкнулся, когда мне нужно было десятичное число, КАК десятичное число было при отправке XML на веб-сервис Amazon. Служба жаловалась, потому что десятичное значение (первоначально из SQL Server) отправлялось как
25.1200
отклоненное (25.12
был ожидаемый формат).Все, что мне нужно было сделать, это
Decimal.Round(...)
2 знака после запятой, чтобы решить проблему.TypedValue
это тип,Decimal
поэтому я не мог просто сделатьToString("N2")
и нужно было округлить его и сохранить его какdecimal
.источник
Вот небольшая программа Linqpad для отображения разных форматов:
Вот результаты:
источник
Math.Round Метод (Десятичный, Int32)
источник
Очень редко вы захотите пустую строку, если значение равно 0.
Ответ с самым высоким рейтингом неверен и потратил 10 минут времени (большинства) людей.
источник
"#"
означает цифру числа (если необходимо) (без дополнения, если не нужно)"0"
означает цифру числа (неважно, что) (дополнено нулями, если не доступно)Ответ Майка М. был идеален для меня в .NET, но .NET Core не имеет
decimal.Round
метода на момент написания.В .NET Core мне пришлось использовать:
Хакерский метод, включая преобразование в строку:
источник
Ни один из них не сделал именно то, что мне нужно, чтобы заставить 2 дп и округлить как
0.005 -> 0.01
Форсирование 2 дп требует повышения точности на 2 дп, чтобы обеспечить как минимум 2 дп
затем округление, чтобы убедиться, что у нас не более 2 дп
источник
Ответ с самым высоким рейтингом описывает метод для форматирования строкового представления десятичного значения, и он работает.
Однако, если вы действительно хотите изменить сохраненную точность на фактическое значение, вам нужно написать что-то вроде следующего:
Пример юнит-теста:
источник
Вы можете использовать system.globalization для форматирования числа в любом необходимом формате.
Например:
Если у вас есть
decimal d = 1.2300000
и вам нужно обрезать его до 2 десятичных знаков, то его можно напечатать следующим образом:d.Tostring("F2",ci);
F2 - форматирование строки до 2 десятичных знаков, а ci - локаль или cultureinfo.для получения дополнительной информации проверьте эту ссылку
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
источник
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Эта ссылка подробно объясняет, как вы можете решить свою проблему и что вы можете сделать, если хотите узнать больше. Для простоты, то, что вы хотите сделать, это
если вы хотите это для валюты, вы можете сделать это проще, набрав «C2» вместо «F2»
источник
источник
Если вам нужно сохранить только 2 десятичных знака (то есть обрезать все остальные десятичные цифры):
Если вам нужно сохранить только 3 знака после запятой:
источник