initial commit [141.14.140.180,mike]
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"math"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
var unitRegistry = make(map[string]UnitInfo)
|
||||
|
||||
func d(f float64) decimal.Decimal {
|
||||
return decimal.NewFromFloat(f)
|
||||
}
|
||||
|
||||
// initUnits populates the unitRegistry with supported units.
|
||||
func initUnits() {
|
||||
// Length (Pivot: meter)
|
||||
unitRegistry["M"] = UnitInfo{d(1.0), DimLength, "m"}
|
||||
unitRegistry["DM"] = UnitInfo{d(0.1), DimLength, "dm"}
|
||||
unitRegistry["CM"] = UnitInfo{d(0.01), DimLength, "cm"}
|
||||
unitRegistry["MM"] = UnitInfo{d(0.001), DimLength, "mm"}
|
||||
unitRegistry["UM"] = UnitInfo{d(1e-6), DimLength, "um"}
|
||||
unitRegistry["NM"] = UnitInfo{d(1e-9), DimLength, "nm"}
|
||||
unitRegistry["KM"] = UnitInfo{d(1000.0), DimLength, "km"}
|
||||
unitRegistry["IN"] = UnitInfo{d(0.0254), DimLength, "in"}
|
||||
unitRegistry["FT"] = UnitInfo{d(0.3048), DimLength, "ft"}
|
||||
unitRegistry["YD"] = UnitInfo{d(0.9144), DimLength, "yd"}
|
||||
unitRegistry["MI"] = UnitInfo{d(1609.344), DimLength, "mi"}
|
||||
unitRegistry["NMI"] = UnitInfo{d(1852.0), DimLength, "nmi"}
|
||||
|
||||
// Mass (Pivot: gram)
|
||||
unitRegistry["G"] = UnitInfo{d(1.0), DimMass, "g"}
|
||||
unitRegistry["MG"] = UnitInfo{d(0.001), DimMass, "mg"}
|
||||
unitRegistry["KG"] = UnitInfo{d(1000.0), DimMass, "kg"}
|
||||
unitRegistry["T"] = UnitInfo{d(1e6), DimMass, "t"}
|
||||
unitRegistry["CT"] = UnitInfo{d(0.2), DimMass, "ct"}
|
||||
unitRegistry["LB"] = UnitInfo{d(453.592), DimMass, "lb"}
|
||||
unitRegistry["OZ"] = UnitInfo{d(28.3495), DimMass, "oz"}
|
||||
|
||||
// Time (Pivot: second)
|
||||
unitRegistry["S"] = UnitInfo{d(1.0), DimTime, "s"}
|
||||
unitRegistry["MS"] = UnitInfo{d(0.001), DimTime, "ms"}
|
||||
unitRegistry["US"] = UnitInfo{d(1e-6), DimTime, "us"}
|
||||
unitRegistry["NS"] = UnitInfo{d(1e-9), DimTime, "ns"}
|
||||
unitRegistry["MIN"] = UnitInfo{d(60.0), DimTime, "min"}
|
||||
unitRegistry["H"] = UnitInfo{d(3600.0), DimTime, "h"}
|
||||
unitRegistry["D"] = UnitInfo{d(86400.0), DimTime, "d"}
|
||||
unitRegistry["WK"] = UnitInfo{d(604800.0), DimTime, "wk"}
|
||||
unitRegistry["YR"] = UnitInfo{d(31536000.0), DimTime, "yr"}
|
||||
|
||||
// Digital (Pivot: byte)
|
||||
unitRegistry["B"] = UnitInfo{d(1.0), DimDigital, "B"}
|
||||
unitRegistry["KB"] = UnitInfo{d(1024.0), DimDigital, "KB"}
|
||||
unitRegistry["MB"] = UnitInfo{d(1024.0 * 1024.0), DimDigital, "MB"}
|
||||
unitRegistry["GB"] = UnitInfo{d(1024.0 * 1024.0 * 1024.0), DimDigital, "GB"}
|
||||
unitRegistry["TB"] = UnitInfo{d(1024.0 * 1024.0 * 1024.0 * 1024.0), DimDigital, "TB"}
|
||||
unitRegistry["PB"] = UnitInfo{d(1024.0 * 1024.0 * 1024.0 * 1024.0 * 1024.0), DimDigital, "PB"}
|
||||
unitRegistry["EB"] = UnitInfo{d(1024.0 * 1024.0 * 1024.0 * 1024.0 * 1024.0 * 1024.0), DimDigital, "EB"}
|
||||
|
||||
// Area (Pivot: square meter)
|
||||
unitRegistry["M2"] = UnitInfo{d(1.0), DimArea, "m²"}
|
||||
unitRegistry["CM2"] = UnitInfo{d(1e-4), DimArea, "cm²"}
|
||||
unitRegistry["MM2"] = UnitInfo{d(1e-6), DimArea, "mm²"}
|
||||
unitRegistry["KM2"] = UnitInfo{d(1e6), DimArea, "km²"}
|
||||
unitRegistry["HA"] = UnitInfo{d(10000.0), DimArea, "ha"}
|
||||
unitRegistry["ACRE"] = UnitInfo{d(4046.8564), DimArea, "acre"}
|
||||
|
||||
// Temperature (Pivot: Kelvin)
|
||||
unitRegistry["K"] = UnitInfo{d(1.0), DimTemp, "K"}
|
||||
unitRegistry["C"] = UnitInfo{d(1.0), DimTemp, "°C"}
|
||||
unitRegistry["F"] = UnitInfo{d(1.0), DimTemp, "°F"}
|
||||
unitRegistry["KELVIN"] = UnitInfo{d(1.0), DimTemp, "K"}
|
||||
unitRegistry["CELSIUS"] = UnitInfo{d(1.0), DimTemp, "°C"}
|
||||
unitRegistry["FAHRENHEIT"] = UnitInfo{d(1.0), DimTemp, "°F"}
|
||||
|
||||
// Angle (Pivot: Radian)
|
||||
unitRegistry["RAD"] = UnitInfo{d(1.0), DimAngle, "rad"}
|
||||
unitRegistry["DEG"] = UnitInfo{d(math.Pi / 180.0), DimAngle, "deg"}
|
||||
unitRegistry["GRAD"] = UnitInfo{d(math.Pi / 200.0), DimAngle, "grad"}
|
||||
unitRegistry["RADIAN"] = UnitInfo{d(1.0), DimAngle, "rad"}
|
||||
unitRegistry["DEGREE"] = UnitInfo{d(math.Pi / 180.0), DimAngle, "deg"}
|
||||
unitRegistry["DEGREES"] = UnitInfo{d(math.Pi / 180.0), DimAngle, "deg"}
|
||||
unitRegistry["GRADIAN"] = UnitInfo{d(math.Pi / 200.0), DimAngle, "grad"}
|
||||
}
|
||||
|
||||
// getDimName returns a human-readable string for a dimension.
|
||||
func getDimName(d Dimension) string {
|
||||
switch d {
|
||||
case DimCurrency:
|
||||
return "Currency"
|
||||
case DimLength:
|
||||
return "Length"
|
||||
case DimMass:
|
||||
return "Mass"
|
||||
case DimTime:
|
||||
return "Time"
|
||||
case DimDigital:
|
||||
return "Digital Storage"
|
||||
case DimArea:
|
||||
return "Area"
|
||||
case DimTemp:
|
||||
return "Temperature"
|
||||
case DimAngle:
|
||||
return "Angle"
|
||||
default:
|
||||
return "Number"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user