blob: fc323558e40b4725de2184a53acc67c5c82ffb8e [file] [log] [blame] [raw]
package universalelectricity.electricity;
/**
* A better way to storage information on electricity
* @author Calclavia
*/
public class ElectricInfo
{
public static enum ElectricUnit
{
AMPERE("Amp", "I"),
AMP_HOUR("Amp Hour", "Ah"),
VOLTAGE("Volt", "V"),
WATT("Watt", "W"),
WATT_HOUR("Watt Hour", "Wh"),
RESISTANCE("Ohm", "R"),
CONDUCTANCE("Siemens", "S");
public String name;
public String symbol;
private ElectricUnit(String name, String symbol)
{
this.name = name;
this.symbol = symbol;
}
public String getPlural()
{
return this.name+"s";
}
}
public static enum MeasurementUnit
{
MICRO("Micro", "mi", 0.000001),
MILLI("Milli", "m", 0.001),
KILO("Kilo", "k", 1000),
MEGA("Mega", "M", 1000000);
public String name;
public String symbol;
public double process;
private MeasurementUnit(String name, String symbol, double process)
{
this.name = name;
this.symbol = symbol;
this.process = process;
}
public String getName(boolean isSymbol)
{
if(isSymbol)
{
return symbol;
}
else
{
return name;
}
}
public double process(double value)
{
return value/this.process;
}
}
public static double getAmps(double watts, double voltage)
{
return watts/voltage;
}
public static double getAmps(double ampHours)
{
return ampHours*3600;
}
public static double getAmpsFromWattHours(double wattHours, double voltage)
{
return getWatts(wattHours)/voltage;
}
public static double getWattHoursFromAmpHours(double ampHours, double voltage)
{
return ampHours*voltage;
}
public static double getAmpHours(double amps)
{
return amps/3600;
}
public static double getWatts(double amps, double voltage)
{
return amps*voltage;
}
public static double getWatts(double wattHours)
{
return wattHours*3600;
}
public static double getWattHours(double watts)
{
return watts/3600;
}
public static double getWattHours(double amps, double voltage)
{
return getWattHours(getWatts(amps, voltage));
}
public static double getResistance(double amps, double voltage)
{
return voltage/amps;
}
public static double getConductance(double amps, double voltage)
{
return amps/voltage;
}
/**
* Displays the unit as text. Works only for positive numbers.
*/
public static String getDisplay(double value, ElectricUnit unit, int significantFigures, boolean isShort)
{
String unitName = unit.name;
if(isShort)
{
unitName = unit.symbol;
}
else if(value > 1)
{
unitName = unit.getPlural();
}
if(value == 0)
{
return value + " " + unitName;
}
if(value <= MeasurementUnit.MILLI.process)
{
return roundDecimals(MeasurementUnit.MICRO.process(value), significantFigures) + " " + MeasurementUnit.MICRO.getName(isShort)+unitName;
}
if(value < 1)
{
return roundDecimals(MeasurementUnit.MILLI.process(value), significantFigures) + " " + MeasurementUnit.MILLI.getName(isShort)+unitName;
}
if(value > MeasurementUnit.KILO.process)
{
return roundDecimals(MeasurementUnit.KILO.process(value), significantFigures) + " " + MeasurementUnit.KILO.getName(isShort)+unitName;
}
if(value > MeasurementUnit.MEGA.process)
{
return roundDecimals(MeasurementUnit.MEGA.process(value), significantFigures) + " " + MeasurementUnit.MEGA.getName(isShort)+unitName;
}
return roundDecimals(value, significantFigures) + " " + unitName;
}
public static String getDisplayShort(double value, ElectricUnit unit)
{
return getDisplay(value, unit, 2, true);
}
public static String getDisplay(double value, ElectricUnit unit)
{
return getDisplay(value, unit, 2, false);
}
public static String getDisplaySimple(double value, ElectricUnit unit, int significantFigures)
{
if(value > 1)
{
if(significantFigures < 1)
{
return (int)value + " " + unit.getPlural();
}
return roundDecimals(value, significantFigures) + " " + unit.getPlural();
}
if(significantFigures < 1)
{
return (int)value + " " + unit.name;
}
return roundDecimals(value, significantFigures) + " " + unit.name;
}
/**
* Rounds a number to a specific number place places
* @param The number
* @return The rounded number
*/
public static double roundDecimals(double d, int significantFigures)
{
int j = (int)(d * Math.pow(10, significantFigures));
return j / (double)Math.pow(10, significantFigures);
}
public static double roundDecimals(double d)
{
return roundDecimals(d, 2);
}
}