C# 计算变量并将其与字典的键对进行比较
我有一本字典,上面有直径(单位:mm)和欧元硬币:C# 计算变量并将其与字典的键对进行比较,c#,dictionary,ienumerable,C#,Dictionary,Ienumerable,我有一本字典,上面有直径(单位:mm)和欧元硬币: CoinsDiameters = new Dictionary<float, decimal> { {25.75F, 2.00m}, {24.25F, 0.50m}, {23.25F, 1.00m}, {22.25F, 0.20m},
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}
};
CoinsDiameters=新字典
{
{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 mm的错误来编写下面的代码,但它总是返回字典中的第一个值(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;
}
public decimal GetValueForDiameter(浮子直径)
{
foreach(硬币直径中的var键。键)
{
如果(直径<键+0.2F | |直径>键-0.2F)
{
返回硬币直径[键];
}
}
返回0;
}
您应该尝试以下方法:
if (Math.Abs(diameter - key) <= 0.2F)
if(Math.Abs(diameter-key)我想你应该把|
替换成&&
:)@appclay是的,在我发布并修复它之后,我注意到了这一点。应该是Hmmm这不会返回任何东西:(@Sean87好极了!…你让我有点害怕。我想我的基本知识是对的:)你没有使用调试器,是吗?你应该使用&&
而不是|
。该逻辑首先检查直径是否小于25.95或大于25.55。显然,此检查始终为真,因此任何输入都将返回字典中的第一个值。已同意。这个逻辑似乎表明,只要直径不等于键值(+-0.2),键就是所追求的。因此选择了第一个,因为它总是合格的。我认为逻辑表明@Sean87犯了一个简单的错误,我们可能都在某个时候犯过。是的。真的,我的大脑在那一刻被绞死了,因为我花了太多的时间在图像处理上,这个小错误对我来说就像攀登珠穆朗玛峰一样!