Эффективность использования топлива в разных единицах в C#
Люди в Соединенных Штатах, Канаде, Соединенном Королевстве и некоторых других местах измеряют эффективность использования топлива в милях на галлон. Как и следовало ожидать, страны, использующие метрическую систему, могут измерять эффективность использования топлива в километрах на литр, но многие из них также измеряют расход топлива в литрах на 100 километров. Чтобы еще больше запутать ситуацию, Соединенное Королевство, Канада и другие используют имперский галлон, который отличается от американского галлона, поэтому вы даже не можете сравнивать значения в милях на галлон в разных странах.
В этом примере вычисляется эффективность использования топлива в трех системах: мили США за галлон, километры Великобритании на галлон и литры на 100 километров. Следующий код выполняет вычисления.
// Коэффициенты пересчета.
private const float miles_per_km = 0.621371192f;
private const float us_gallons_per_liter = 0.264172052637296f;
private const float uk_gallons_per_liter = 0.2199692483f;
// Вычислить статистику пробега.
private void btnCalculate_Click(object sender, EventArgs e)
{
// Получаем входные данные.
float miles = float.Parse(txtDistance.Text);
float gallons = float.Parse(txtFuel.Text);
// Преобразуем в мили и галлоны США.
if (radKilometers.Checked) miles *= miles_per_km;
if (radUkGallons.Checked)
{
gallons *= us_gallons_per_liter / uk_gallons_per_liter;
}
else if (radKilometers.Checked)
{
gallons *= us_gallons_per_liter;
}
// Вычислить значения производительности.
float us_mpg = miles / gallons;
float us_gal_per_100_miles = 100 / us_mpg;
// Значения в США.
txtUsMpg.Text = us_mpg.ToString("0.00");
txtUsGalPer100Miles.Text =
us_gal_per_100_miles.ToString("0.00");
// Значение Великобритании.
float uk_gals = gallons * uk_gallons_per_liter /
us_gallons_per_liter;
float uk_mpg = miles / uk_gals;
float uk_gal_per_100_miles = 100 / uk_mpg;
txtUkMpg.Text = uk_mpg.ToString("0.00");
txtUkGalPer100Miles.Text =
uk_gal_per_100_miles.ToString("0.00");
// Метрические значения.
float liters = gallons / us_gallons_per_liter;
float kilometers = miles / miles_per_km;
float km_per_liter = kilometers / liters;
float l_per_100_km = 100 / km_per_liter;
txtKpl.Text = km_per_liter.ToString("0.00");
txtLiterPer100km.Text = l_per_100_km.ToString("0.00");
}
Код начинается с определения некоторых коэффициентов преобразования для перевода между различными единицами измерения.
Затем программа получает входные данные пользователя и преобразует их в мили и галлоны США. Удобный трюк для работы с несколькими блоками состоит в том, чтобы сначала преобразовать входы в какой-то известный блок. В этом примере я выбрал мили и галлоны США, но вы можете использовать любые единицы, которые вы предпочитаете.
