This commit is contained in:
2021-11-12 14:55:04 +03:00
parent 2d69035bd7
commit 438c123876
10 changed files with 317 additions and 57 deletions

View File

@@ -7,54 +7,28 @@
{
#region ойства класса
/// <summary>
/// Имена чисел ( , тысяч, миллионов, миллиардов и триллионов)
/// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
/// </summary>
public string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
public string[] CountNames { get; set; } = { "", "тыс.", "млн.", "млрд." };
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; } = 2;
public byte DecimalPlaces { get; set; } = 1;
/// <summary>
/// Максимально байт (далее идут Кбайты)
/// Делители чисел
/// </summary>
public long ByteMax { get; set; } = 1024;
/// <summary>
/// Максимально Кбайт (далее идут Мбайты)
/// </summary>
public long KByteMax { get; set; } = 1048576;
/// <summary>
/// Максимально Мбайт (далее идут Гбайты)
/// </summary>
public long MByteMax { get; set; } = 1073741824;
/// <summary>
/// Максимально Гбайт (далее идут Тбайты)
/// </summary>
public long GByteMax { get; set; } = 1099511627776;
public long[] Delimeters { get; set; } = { 1000, 1000000, 1000000000 };
#endregion
#region Реализация интерфейса
/// <summary>
/// Реализация интерфейса
/// </summary>
public string[] ValueNames { get => SizeNames; set => SizeNames = value; }
public string[] ValueNames { get => CountNames; set => CountNames = value; }
/// <summary>
/// Реализация интерфейса
/// </summary>
public long[] MaxSizes
{
get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax };
set
{
ByteMax = value[0];
KByteMax = value[1];
MByteMax = value[2];
GByteMax = value[3];
}
}
/// <summary>
/// Реализация интерфейса
/// </summary>
public string Format(long value) => (this as IValueFormatter).Format(value);
public long[] MaxSizes { get => Delimeters; set => Delimeters = value; }
#endregion
}
}

View File

@@ -51,10 +51,6 @@
GByteMax = value[3];
}
}
/// <summary>
/// Реализация интерфейса
/// </summary>
public string Format(long value) => (this as IValueFormatter).Format(value);
#endregion
}
}

View File

@@ -29,23 +29,29 @@
/// <returns>Форматированная размерность (например, 20 Мб)</returns>
public string Format(long value)
{
//Bytes
if (value < MaxSizes[0])
return $"{value} {ValueNames[0]}";
//KiloBytes
if ((value >= MaxSizes[0]) && (value < MaxSizes[1]))
return $"{FrmtSize(value, MaxSizes[0])} {ValueNames[1]}";
//MegaBytes
if ((value >= MaxSizes[1]) && (value < MaxSizes[2]))
return $"{FrmtSize(value, MaxSizes[1])} {ValueNames[2]}";
//GigaBytes
if ((value >= MaxSizes[2]) && (value < MaxSizes[3]))
return $"{FrmtSize(value, MaxSizes[2])} {ValueNames[3]}";
//TeraBytes
if (value >= MaxSizes[3])
return $"{FrmtSize(value, MaxSizes[3])} {ValueNames[4]}";
//Не определён
return $"{value} {ValueNames[0]}";
//Левая граница
long leftnum;
//Правая граница
long rightnum;
for (int i = 0; i <= MaxSizes.Length; i++)
{
if (i == 0)
leftnum = 0;
else
leftnum = MaxSizes[i - 1];
if (i == MaxSizes.Length)
rightnum = long.MaxValue;
else
rightnum = MaxSizes[i];
if ((value >= leftnum) && (value < rightnum))
return $"{FormatValue(value, leftnum)} {ValueNames[i]}";
}
return value.ToString();
}
/// <summary>
/// Деление числа на число с DecimalPlaces знаками после запятой
@@ -53,8 +59,13 @@
/// <param name="dividend">Делимое число</param>
/// <param name="divider">Число-делитель</param>
/// <returns>Частное (с DecimalPlaces знаками после запятой)</returns>
private string FrmtSize(long dividend, long divider)
private string FormatValue(long dividend, long divider)
{
if (divider == 0)
{
return $"{dividend}";
}
long delim = 1;
for (int i = 0; i <= DecimalPlaces; i++)

View File

@@ -29,4 +29,8 @@
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Shell.Interop" Version="17.0.31902.203" />
</ItemGroup>
</Project>