Преобразование десятичной дроби в десятичную без знака (или строку?) В 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