public static EnergyUnit GetAdjustedUnit(this EnergyUnit originalUnit, ref decimal factor) { var minimalFactorLog = originalUnit.GetFactorLogForSmallestUnit(factor); if (Math.Round(minimalFactorLog) != minimalFactorLog) { return(originalUnit); } else { switch (originalUnit) { case EnergyUnit.Wh: case EnergyUnit.kWh: case EnergyUnit.MWh: if (minimalFactorLog < 3) { factor = (decimal)Math.Pow(10, minimalFactorLog); return(EnergyUnit.Wh); } else if (minimalFactorLog < 6) { factor = (decimal)Math.Pow(10, minimalFactorLog - 3); return(EnergyUnit.kWh); } else { factor = (decimal)Math.Pow(10, minimalFactorLog - 6); return(EnergyUnit.MWh); } case EnergyUnit.J: case EnergyUnit.kJ: case EnergyUnit.MJ: case EnergyUnit.GJ: if (minimalFactorLog < 3) { factor = (decimal)Math.Pow(10, minimalFactorLog); return(EnergyUnit.J); } else if (minimalFactorLog < 6) { factor = (decimal)Math.Pow(10, minimalFactorLog - 3); return(EnergyUnit.kJ); } else if (minimalFactorLog < 9) { factor = (decimal)Math.Pow(10, minimalFactorLog - 6); return(EnergyUnit.MJ); } else { factor = (decimal)Math.Pow(10, minimalFactorLog - 9); return(EnergyUnit.GJ); } default: throw new NotImplementedException("Unknown energy unit : " + originalUnit.ToString()); } } }
public void SetEnergyUnit(EnergyUnit unit) => Preferences.Set(PreferenceKeys.EnergyUnit, unit.ToString());