20211112
This commit is contained in:
@@ -7,54 +7,28 @@
|
||||
{
|
||||
#region Cвойства класса
|
||||
/// <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
|
||||
}
|
||||
}
|
@@ -51,10 +51,6 @@
|
||||
GByteMax = value[3];
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Реализация интерфейса
|
||||
/// </summary>
|
||||
public string Format(long value) => (this as IValueFormatter).Format(value);
|
||||
#endregion
|
||||
}
|
||||
}
|
@@ -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++)
|
||||
|
@@ -29,4 +29,8 @@
|
||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Shell.Interop" Version="17.0.31902.203" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
Reference in New Issue
Block a user