У меня есть поле для отображения цены, которое иногда может быть либо 100, либо 100,99, либо 100,9. Я хочу, чтобы цена отображалась в 2 десятичных разрядах, только если для этой цены введены десятичные дроби, например, если ее 100, то она должна показать 100, а не 100.00, и если цена 100.2, она должна отображать 100.20 аналогично, для 100.22 должно быть одинаковым. Я гуглил и наткнулся на несколько примеров, но они не соответствовали точно тому, что я хотел:
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
c#
regex
string-formatting
number-formatting
Мистер А
источник
источник
Ответы:
Не элегантный способ будет:
С
DoFormat
чем-то вроде:Не элегантно, но работает для меня в подобных ситуациях в некоторых проектах.
источник
CurrentCulture
, десятичный разделитель может не быть.
. ЕслиCultureInfo.InvariantCulture
не используется сstring.Format
, вам придется проверить значениеCultureInfo.NumberFormat.NumberDecimalSeparator
, и это будет настоящая PITA. :)60000
int, и я хочу, чтобы это было60.000
?Извините за возобновление этого вопроса, но я не нашел правильный ответ здесь.
При форматировании чисел вы можете использовать
0
как обязательное место, так и#
необязательное место.Так:
Вы также можете комбинировать
0
с#
.Для этого всегда используется метод форматирования
CurrentCulture
. Для некоторых культур.
будут изменены на,
.Ответ на оригинальный вопрос:
Самым простым решением является @Andrew ( здесь ). Так что я бы лично использовал что-то вроде этого:
источник
Это обычный случай использования форматирования с плавающей точкой.
К сожалению, все встроенные однобуквенные строки формата (например, F, G, N) не достигнут этого напрямую.
Например,
num.ToString("F2")
всегда будет отображаться 2 десятичных знака, как123.40
.Вам придется использовать
0.##
шаблон, даже если он выглядит немного многословно.Полный пример кода:
источник
Старый вопрос, но я хотел добавить самый простой вариант на мой взгляд.
Без тысяч разделителей:
С тысячами разделителей:
То же самое, но с String.Format :
Если вам это нужно во многих местах , я бы использовал эту логику в методе расширения :
источник
пытаться
источник
В любом случае я не знаю, как поместить условие в спецификатор формата, но вы можете написать свой собственный форматер:
источник
Вот альтернатива методу Уве Кейма, который по-прежнему поддерживает тот же вызов метода:
С
MyCustomFormat
чем-то вроде:источник
CurrentCulture
, десятичный разделитель может не быть.
. ЕслиCultureInfo.InvariantCulture
не используется сstring.Format
, вам придется проверить значениеCultureInfo.NumberFormat.NumberDecimalSeparator
, которое довольно не элегантно.Простой однострочный код:
источник
Если ваша программа нуждается в быстром запуске, вызовите value.ToString (formatString), чтобы повысить производительность форматирования строки примерно на 35% по сравнению с $ "{value: formatString}" и string.Format (formatString, value).
Данные
Код
Вывод кода
Ссылки
Пользовательские строки числового формата [docs.microsoft.com]
Пример Qt Barts BarChart [doc.qt.io]
источник
Я боюсь, что нет встроенного формата, который сделает это. Вам придется использовать другой формат в зависимости от того, является ли значение целым числом или нет. Или всегда форматируйте до 2 десятичных разрядов, а затем манипулируйте строкой, чтобы удалить любой завершающий «.00».
источник
Если ни один из других ответов не работает для вас, это может быть связано с тем, что вы связываете
ContentProperty
элемент управления вOnLoad
функции, что означает, что это не будет работать:Решение простое:
ContentStringFormat
в xaml есть свойство. Поэтому, когда вы создаете ярлык, сделайте это:Или
источник
как то так тоже будет работать
источник
Пытаться:
источник
Чтобы сделать код более понятным, о чем писал Кахия (это понятно, но сложно, когда вы хотите добавить к нему больше текста) ... попробуйте это простое решение.
Мне пришлось добавить дополнительное приведение (десятичное), чтобы Math.Round сравнил две десятичные переменные.
источник
Это сработало для меня!
источник
Имея дело с десятичными числами, поступающими из (T-) базы данных SQL, вы хотите иметь возможность преобразовывать обнуляемые и ненулевые десятичные числа с x десятичными разрядами и легко просматривать код в соответствии с определениями вашей таблицы - и, конечно, отображать правильное количество десятичных знаков для пользователя.
К сожалению, Entity Framework не конвертирует автоматически что-то вроде SQL
decimal(18,2)
в эквивалент .NET с тем же количеством десятичных разрядов (поскольку существует только десятичная дробь с полной точностью). Вы должны урезать десятичные разряды вручную.Итак, я сделал это так:
Пример использования:
источник