当我运行以下代码时:
public int[] finalResult = new int[dimension];
public float[] calculatedValue = new float[dimension];
.....
.....
finalResult[i] = (int) Math.Floor(calculatedValue[i]);
Console.WriteLine( "calculated:" + calculatedValue[i]
+ " final:" + finalResult[i]
+ " test: " +(int) Math.Floor(calculatedValue[i]));
输出结果为:
计算:-0.02043936 final:0 test:-1
为什么“final”与完全相同的代码生成的“test”不同?哪一个错了,为什么?
更简单,更小的片段
finalResult[i]=(int)Math.Floor(-3.0002);
Console.WriteLine( "final: "+ finalResult[i]+ " test:" +(int)Math.Floor(-3.0002));
输出 决赛:0测试:-4
其余代码无效,如下所示 我最后尝试了以下内容,
public int[] junkArray = new int[dimension];
junkArray[i]=(int)Math.Floor(-3.0002); //Junk Array is only assigned here in whole code
Console.WriteLine( "final: "+ (int) junkArray[i]+ " test:" +(int)Math.Floor(-3.0002));
我得到最终输出:0测试:-4
答案 0 :(得分:3)
这是我认为实际发生的事情。请记住,我在这里做出假设,因为你提供的代码没有编译,当我尝试调整它时,我总能得到我期望的正确结果。因此,我试图通过犯下故意的错误来考虑如何产生你得到的结果:
using System;
namespace ConsoleApplication1
{
class Program
{
private static int dimension = 1;
public static int[] junkArray = new int[dimension];
static void Main(string[] args)
{
Method1();
Method2();
}
static void Method1()
{
int i = 0;
junkArray[i] = (int)Math.Floor(-3.0002);
}
static void Method2()
{
int i = 0;
int[] junkArray = new int[dimension];
Console.WriteLine("final: " + (int)junkArray[i] + " test:" + (int)Math.Floor(-3.0002));
}
}
}
这会产生您看到的结果:
最终:0测试:-4
我将代码拆分为两种方法,一种方法是执行“计算”,另一种方法执行“演示”。但是,出于某种原因(缺少咖啡因,无论如何),我的第二种方法也声明了一个隐藏/遮蔽包含我们的计算结果的字段的数组变量。这不是非法的,但这意味着当我从我的Console.WriteLine方法调用junkArray中读取时,我正在从不同的 junkArray中读到我之前写的结果。
这可能不是正在发生的事情,但这是一种可能性,如果没有看到您的实际代码,这是我能提供的最佳猜测。看看并确保您正在读取的数组肯定您将结果写入的相同数组,而不是第二个“遮蔽”第一个数组的数组。
答案 1 :(得分:2)
如果我测试代码
var final = new int[1];
var calc = new[] { -0.02043936f };
final[0] = (int)Math.Floor(calc[0]);
Console.WriteLine(
"calc:{0} final:{1} test:{2}",
calc[0],
final[0],
(int)Math.Floor(calc[0]));
毫无疑问我得到了输出
calc:-0.02043936 final:-1 test:-1
所以,你的代码还有其他问题。
答案 2 :(得分:0)
这里发生了两件事
首先 - -0.02043936是计算值
现在你正在应用math.floor。它将做的是,它将使值下降并返回一个双倍,这将是一个非常小的数字。
现在您将它转换为整数。这样做,因为它更接近于零,它将把它变为零。
要证明这一点,请计算出值-0.62043936之类的东西,根据您的期望得到-1