2015-08-05 2 views
1

Давайте предположим, что у меня есть десятичное вроде этого:Как добавить нули после десятичной точки

decimal a= 12.1 

Но я хочу, чтобы это было:

a=12.10 

можно ли сделать это без использования .toString()? Я пробовал использовать decimal.Round(), но это все еще устанавливает =12.1

Уточнение: данные, например. 12.1 получен из webservice, поэтому я не могу просто изменить его на 12.10M.

+2

Как я знаю - нет. Единственный способ - использовать .toString(). –

+1

Тип 'decimal' предназначен для работы с числовыми данными. Как числа, 12.10 и 12.1 * точно * то же самое, и поэтому десятичный тип данных не был предназначен для различения этих двух. Вам нужно либо преобразовать в строки, либо отдельно отслеживать количество десятичных знаков, которые вы хотите показать. –

+0

@Damien_The_Unbeliever На самом деле тип 'decimal' включает эту информацию. Проблема с кодом szpic заключается в том, что он не использует десятичный литерал - когда двойное значение «12.10» отбрасывается до десятичного, нули теряются. Использование '12.10M' работает просто отлично :) – Luaan

ответ

7

На самом деле, тип .NET decimal включает нули после десятичной точки. Вы просто должны использовать десятичный литерал:

var a = 12.10M; 

Если вам это нужно для значений в реальное время, а не во время компиляции, вы можете умножить с другим десятичным литералом, например:

var a = someDecimalInput; 
return a * 1.0000M; // Ensures at least four digits after the decimal point. 

Однако , Я бы все же советовал против этого - форматирование лучше оставить на уровне презентации, и именно там вы хотите обрабатывать, сколько десятичных точек отображать. Обычно вы использовали что-то вроде a.ToString("f2").

+0

Реализация decimal.ToString: возвращает Number.FormatDecimal (this, null, NumberFormatInfo.CurrentInfo) это то, что отладчик вызывает для отображения десятичного значения – Laurijssen

+0

@ ServéLaurijssen Да, это то, что я ожидаю - похоже, что отладчик isn ' t фактически использует 'ToString' для десятичных знаков, потому что' a.ToString() 'показывает нули, а отладчик, по-видимому, этого не делает. Это прекрасно, отладчик может делать все, что ему нравится, и есть определенные способы изменить этот вывод независимо от реализации «ToString»: D – Luaan

+0

, конечно, реализация decimal.ToString() не может вызвать decimal.ToString() :) – Laurijssen

Смежные вопросы