Оценка и сравнение переменной с парами ключей словаря - PullRequest
2 голосов
/ 28 марта 2012

У меня есть словарь, в котором указан диаметр (в мм) и стоимость монет евро:

CoinsDiameters = new Dictionary<float, decimal>
                {
                    {25.75F, 2.00m},
                    {24.25F, 0.50m},
                    {23.25F, 1.00m},
                    {22.25F, 0.20m},
                    {21.25F, 0.05m},
                    {19.75F, 0.10m},
                    {18.75F, 0.02m},
                    {16.25F, 0.01m}
                };

Так, например, монета в 50 евроцентов имеет диаметр 24,25 мм. после некоторой обработки изображения я получаю приблизительный диаметр монеты 50 центов на изображении диаметром 24,1 мм. Я попытался написать приведенный ниже код, имея в виду ошибку +/- 0,2 мм, но она всегда возвращает первое значение в словаре (монета 2,00 евро). Что может быть не так с логикой?

public decimal GetValueForDiameter(float diameter)
{
    foreach(var key in CoinsDiameters.Keys)
    {
        if (diameter < key + 0.2F || diameter > key - 0.2F)
        {
            return CoinsDiameters[key];
        }
    }

    return 0;
}

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Я думаю, вам следует заменить || на &&:)

4 голосов
/ 28 марта 2012

Вы должны попробовать это:

if (Math.Abs(diameter - key) <= 0.2F)
...