【问题标题】:Conditional If not returning as expected有条件的如果没有按预期返回
【发布时间】:2020-06-28 02:10:40
【问题描述】:
        for (int i = 0; i < iMatrix1.Count(); i++)
        {
           if (Math.Abs(iMatrix1[i]) > 1E-20 & Math.Abs(iMatrix1[i]) < 0.0001) { oArrayList.Add(0); }
            else { oArrayList.Add(iMatrix1[i]); }
        }

也许只是眼睛疲倦......但我没有得到我的预期结果,在这里。我试图消除给定容差下限之外的错误数字。 (意思是,如果它们超出我试图定义的范围,则需要将它们处理为零)

出于某种原因,它也在更改超出此下限的数字。

我确信这只是一个愚蠢的错误。请纠正我。

iMatrix[i] 的返回值 = -0.000000000000000055

很明显,0.00000000000000000001

再一次,我确信这只是一个愚蠢的疏忽……但现在它正在杀死我。

【问题讨论】:

  • 尝试将 & 替换为 &&
  • && 是条件逻辑。如果我们在评估左手之后仅根据必要性评估右手,那如何解决问题?从逻辑上讲,如果左手不正确,则不会评估右手。如果左手是真的,那仍然不能解释对限制的不正确评估的差异。尽管如此,我确实尝试过,但并没有解决问题......
  • 你能发布一个完整的程序及其输出和预期输出吗?
  • @PauloMorgado - 绝对不是。这是专有的。但我已将其范围缩小到确切的问题区域。如果我把它注释掉,只返回数组值,我会得到确切的矩阵值。我的预期输出是我在上面发布的值(在绝对括号中)返回为零。我的问题的哪一部分不清楚。也许我可以更好地解决它。但可以肯定的是,问题不在于我的输入值。我返回未修改的值没有问题。
  • 所以没有其他人熟悉这个:effbot.org/pyfaq/…

标签: visual-studio-2013 conditional-statements boolean-expression c#-7.0 boolean-operations


【解决方案1】:

Mhan7,如果我没听错的话,你是在尝试这样做吗?

var a = 0.00000000000000000001;
var b = -0.000000000000000055;
var c = .00001;

Console.WriteLine($"a={c},b={b},c={c} | a < b = { a < Math.Abs(b)} | c > b = { c > Math.Abs(b)}");

if (Math.Abs(b) > a & Math.Abs(b) < c) 
{ 
    Console.WriteLine("Hello, World!");
}

这在您的计算机上是否有效 - 我使用了与您相同的条件。上面似乎验证了您的代码是正确的,也就是返回“Hello,World”,因为 - 正如您上面所说的:

a

【讨论】:

猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2016-06-28
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多