Преобразование десятичной дроби в десятичную без знака (или строку?) В C#

У меня есть переменная, DifferenceAmt, который является десятичным. Это может быть как негатив, так и позитив. Мне нужно вывести значение DifferenceAmt, но без отрицательного знака, если он отрицательный, в виде строки. Я знаю, как удалить отрицательный знак, проверив сначала, если DifferenceAmt меньше нуля, а затем делает подстроку из 2-го символа, если это так, но это кажется громоздким. Я пытался конвертировать DifferenceAmt сначала к UInt64,

UInt64 differenceamt = (UInt64)DifferenceAmt;

но я продолжаю получать сообщение об ошибке, что число слишком велико для UInt64 (даже если это, например, -10). Как я могу это сделать?

4 ответа

Решение

Есть несколько доступных способов сделать это. Самый простой способ - использовать абсолютное значение с помощью Math.Abs.

decimal x = -10.53m;
string s = Math.Abs(x).ToString(); // 10.53

Другой способ - использовать пользовательский NumberFormatInfo с пустым NegativeSign.

decimal x = -10.53m;
string s = x.ToString(new NumberFormatInfo { NegativeSign = string.Empty }); // 10.53

Еще один способ - использовать пользовательский форматер для положительных / отрицательных чисел. Но вы должны указать пользовательский формат строки в таком случае. Подробнее об этом: ";" Разделитель Разделов.

decimal x = -10.53m;
string s = x.ToString("#.##;#.##") // 10.53

Использование Math.Abs(differenceAmt) чтобы получить абсолютное значение.

Кастинг в UInt64 не сработает Ваш пример -10 находится за пределами диапазона UInt64и так же не получится для других Decimal значения вне диапазона UInt64. Это также должно было бы урезать значение до целого числа.

Использование Math.Abs(DifferenceAmt).ToString(); Это даст вам абсолютное значение числа и удалит отрицательный знак.

Вы можете использовать это:

Math.Abs(differenceAmt).ToString();

видеть это:

http://msdn.microsoft.com/en-us/library/a4ke8e73%28v=vs.110%29.aspx

Другие вопросы по тегам