Есть ли средство форматирования дисплея, которое будет выводить десятичные числа в качестве этих строковых представлений в C # без округления?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} будет округляться, и использование некоторых функций типа Trim не будет работать с привязанным числовым столбцом в сетке.
c#
formatting
decimal
JC.
источник
источник
"0.0#"
.Я только что научился правильно использовать
G
спецификатор формата. См. Документацию MSDN . Немного ниже есть примечание, в котором говорится, что конечные нули будут сохраняться для десятичных типов, если точность не указана. Я не знаю, зачем они это сделали, но указание максимального количества цифр для нашей точности должно решить эту проблему. Так что для форматирования десятичных знаковG29
это лучший выбор.источник
Этот строковый формат должен сделать ваш день: «0. ############################». Имейте в виду, что десятичные дроби могут иметь не более 29 значащих цифр.
Примеры:
источник
Это еще один вариант того, что я видел выше. В моем случае мне нужно сохранить все значащие цифры справа от десятичной точки, что означает удаление всех нулей после самой значащей цифры. Просто подумал, что было бы неплохо поделиться. Я не могу ручаться за эффективность этого, но когда вы пытаетесь достичь эстетики, вы уже в значительной степени прокляты в неэффективности.
Вот и все, просто хотел бросить свои два цента.
источник
strValue.TrimEnd('0').TrimEnd('.')
вместоEndsWith
чека?Другое решение, основанное на ответе дислексиканабоко , но не зависящее от текущей культуры:
источник
Способ расширения:
Пример кода:
Вывод:
источник
IndexOf
для поиска символов в строке. В примере довольно легко настроить решение проблемы без десятичных знаков.Я не думаю, что это возможно из коробки, но такой простой метод должен сделать это
источник
Сделать "из коробки" довольно просто:
это удалит все конечные нули из вашего десятичного числа.
Единственное, что вам нужно сделать, это добавить
.ToString().TrimEnd('0','.');
к десятичной переменной, чтобы преобразовать aDecimal
вString
без завершающих нулей, как в примере выше.В некоторых регионах это должно быть
.ToString().TrimEnd('0',',');
(где вместо точки используется запятая, но вы также можете добавить точку и запятую в качестве параметров, чтобы быть уверенным).(вы также можете добавить оба параметра в качестве параметров)
источник
params
аргументом вам не нужно явно создавать массив. Таким образом, вместо подробногоTrimEnd("0".ToCharArray())
вы можете просто написатьTrimEnd('0')
(примечание: передается singlechar
вместо achar[]
).char
, а не astring
(так: одинарные кавычки, а не двойные кавычки). Я починил это для вас - надеюсь, вы не против.источник
Я получил следующий код:
источник
У меня получился такой вариант:
Преимущества:
вы можете указать максимальное количество значащих цифр после точки для отображения во время выполнения;
вы можете явно указать метод раунда;
вы можете явно контролировать культуру.
источник
Вы можете создать метод расширения
источник
Я сделал следующие методы расширения для себя, чтобы они соответствовали одному из моих проектов, но, возможно, они будут полезны кому-то другому.
Хотя для этого потребуется ссылка на
System.Numerics
.источник