70 lines
1.5 KiB
C#
70 lines
1.5 KiB
C#
namespace ExcelKv.Core.Units;
|
|
|
|
public enum UnitCategory
|
|
{
|
|
None = 0,
|
|
Length,
|
|
Area,
|
|
Volume,
|
|
Weight,
|
|
Count, // ex: EA, Set
|
|
Time // ex: Hour, Day
|
|
}
|
|
|
|
public enum SiUnit
|
|
{
|
|
// Default
|
|
None = 0,
|
|
|
|
// Length (Base: Meter)
|
|
Meter = 100,
|
|
Millimeter = 101,
|
|
Centimeter = 102,
|
|
Kilometer = 103,
|
|
|
|
// Area (Base: SquareMeter)
|
|
SquareMeter = 200,
|
|
Hectare = 201,
|
|
|
|
// Volume (Base: CubicMeter)
|
|
CubicMeter = 300,
|
|
Liter = 301,
|
|
|
|
// Weight/Mass (Base: Kilogram)
|
|
Kilogram = 400,
|
|
Ton = 401,
|
|
Gram = 402,
|
|
|
|
// Count
|
|
Each = 900,
|
|
Set = 901
|
|
}
|
|
|
|
public static class SiUnitExtensions
|
|
{
|
|
public static UnitCategory GetCategory(this SiUnit unit)
|
|
{
|
|
int id = (int)unit;
|
|
if (id >= 100 && id < 200) return UnitCategory.Length;
|
|
if (id >= 200 && id < 300) return UnitCategory.Area;
|
|
if (id >= 300 && id < 400) return UnitCategory.Volume;
|
|
if (id >= 400 && id < 500) return UnitCategory.Weight;
|
|
if (id >= 900 && id < 1000) return UnitCategory.Count;
|
|
return UnitCategory.None;
|
|
}
|
|
|
|
public static string ToSymbol(this SiUnit unit) => unit switch
|
|
{
|
|
SiUnit.Meter => "m",
|
|
SiUnit.Millimeter => "mm",
|
|
SiUnit.Centimeter => "cm",
|
|
SiUnit.Kilometer => "km",
|
|
SiUnit.SquareMeter => "m2",
|
|
SiUnit.CubicMeter => "m3",
|
|
SiUnit.Kilogram => "kg",
|
|
SiUnit.Ton => "ton",
|
|
SiUnit.Each => "EA",
|
|
_ => ""
|
|
};
|
|
}
|