我有一本字典,其中包含直径(单位为mm)和欧元硬币的价值:
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毫米。经过一些图像处理后,我得到了一个直径为24.1毫米的50美分硬币的粗糙直径。我尝试编写下面的代码,记住+/- 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;
}
答案 0 :(得分:6)
我认为您应该将||
替换为&&
:)
答案 1 :(得分:4)
你应该试试这个:
if (Math.Abs(diameter - key) <= 0.2F)