Учитывая список размеров экрана, как я могу определить, какие из них имеют соотношение сторон 4: 3 и 16: 9?
Я могу использовать ширину / высоту, чтобы получить его, но для размеров 16: 9 я иногда получаю 1.778, а иногда 1.777778 из-за ошибок округления.
Проверить, если 4 * height == 3 * width
или же 16 * height == 9 * width
,
Помните определение Рациональное число: Это класс эквивалентности пар целых чисел (м, N) с учетом эквивалентности (м, N) ≡ (м», N‘) если и только если N‘ м знак равно N м».
Вы можете сделать так, чтобы округление всегда было одинаковым, а затем вы можете сравнить значения:
float ratio = (int)((width / height) * 100);
Вы всегда получите 177 за 16: 9 и 133 за 4: 3
удачи
сравните с некоторой эпсилон близостью.
должно быть что-то вроде:
double epsilon = 0.01;
if(math.abs(screen1.height/screen1.width - screen2.height/screen2.width) < epsilon)
{
//equal ratios
}
Вы должны использовать значение эпсилона для сравнения.
Вы можете взглянуть на: http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm