gpt4 book ai didi

c# - 参数接受了错误的类型但仍然运行良好——为什么?

转载 作者:太空狗 更新时间:2023-10-30 00:05:23 30 4
gpt4 key购买 nike

下面是我从网上搜索到的用C#计算Excel的percentrank函数的方法。我修改了一点以适应我的程序,但没有改变主要逻辑。

程序编译并运行良好,没有任何错误(据我所知)。但是,进一步检查我的代码,在我的主要代码中,我使用

调用该函数
        double result = percentRank( array, x); 

在哪里

x 是一个整数
数组是一个列表(int)

它的类型与指定的 percentRank 方法采用的类型不同,但它仍然运行良好。我的问题是为什么?

        private static double percentRank(List<int> array, double x)
{
// Calculate the PERCENTRANK(array, x)
//If X matches one of the values in the array, this function is
//equivalent to the Excel formula =(RANK(x)-1)/(N-1) where N is the number of data points.
//If X does not match one of the values, then the PERCENTRANK function interpolates.
// http://www.pcreview.co.uk/forums/algorithm-computing-excel-percentrank-t946312.html


array.Sort();

double result = 0;
bool foundX = false;

for (int index = 0; index < array.Count; index++)
{
if (array[index] == x)
{
result = ((double)index) / ((double)array.Count - 1);
foundX = true;
break;
}
}
// calculate value using linear interpolation

if (foundX == false)
{
double x1, x2, y1, y2;

x1 = x2 = x;

for (int i = 0; i < array.Count - 1; i++)
{
if (array[i] < x && x < array[i + 1])
{
x1 = array[i];
x2 = array[i + 1];
foundX = true;
break;
}
}

if (foundX == true)
{
y1 = percentRank(array, x1);
y2 = percentRank(array, x2);

result = (((x2 - x) * y1 + (x - x1) * y2)) / (x2 - x1);
}
else
{
// use the smallest or largest value in the set which ever is closer to valueX

if (array[0] > x)
{
result = 0;
}
else
{
result = 1;
}
}
}

return result;
}

编辑:好的答案是隐式类型转换。我可以禁用它吗?我不喜欢它,因为它可能会产生一些我不知道的错误。

最佳答案

My question is WHY?

您可以将整数分配给 double 值。 C# 将从 Int32 隐式转换为 Double

你可以在这里看到:

double value = 3;

由于相同的隐式转换,这是允许的。如果没有这种转换,您将不得不输入:

double value = 3.0;

这是在 C# 语言规范的“6.1.2 隐式数字转换”部分中指定的

The implicit numeric conversions are:

...

  • From int to long, float, double, or decimal.

关于c# - 参数接受了错误的类型但仍然运行良好——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627164/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com