У вас есть много способов получить этот вывод. Таким образом, у вас есть две переменные для положительных и отрицательных значений:
var s = -30800322;
var u = 30800322;
1. string.Replace
Быстрый и простой способ:
Console.WriteLine(string.Format("{0:D11}", s).Replace("-0", "-"));
Console.WriteLine(string.Format("{0:D11}", u).Replace("-0", "-"));
2. IFormatProvider
Создание пользовательского IFormatProvider для использования с функцией string.Format(..)
:
public class vsnwprintf : IFormatProvider, ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (arg == null || !int.TryParse(arg.ToString(), out int x))
return null;
var f = "{0:D11}";
if (x < 0)
return string.Concat("-", string.Format(f, x).Substring(2));
else
return string.Format(f, x);
}
public object GetFormat(Type formatType)
{
return (formatType == typeof(ICustomFormatter)) ? this : null;
}
}
Использование:
Console.WriteLine(string.Format(new vsnwprintf(), "{0}", s));
Console.WriteLine(string.Format(new vsnwprintf(), "{0}", u));
3. ToString ()
Создать новый класс и переопределить функцию ToString()
:
public class vsnwprintf
{
private readonly int Value;
private readonly int Length;
private vsnwprintf() { }
public vsnwprintf(int val, int length) : this()
{
Value = val;
Length = length;
}
public override string ToString()
{
var f = string.Concat("{0:D", Length, "}");
if (Value < 0)
return string.Concat("-", string.Format(f, Value).Substring(2));
else
return string.Format(f, Value);
}
}
Использование:
Console.WriteLine(new vsnwprintf(s, 11));
Console.WriteLine(new vsnwprintf(u, 11));
4. Метод расширения
Создание класса stati c и метод расширения для типа int
:
public static class Extensions
{
public static string Tovsnwprintf(this int Value, int Length = 11)
{
var f = string.Concat("{0:D", Length, "}");
if (Value < 0)
return string.Concat("-", string.Format(f, Value).Substring(2));
else
return string.Format(f, Value);
}
}
Использование:
Console.WriteLine(s.Tovsnwprintf());
Console.WriteLine(u.Tovsnwprintf(11));
Каждый из которых возвращает:
-0030800322
00030800322