Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言访问Excel公式#_C#_Asp.net_Excel Formula - Fatal编程技术网

C# 用C语言访问Excel公式#

C# 用C语言访问Excel公式#,c#,asp.net,excel-formula,C#,Asp.net,Excel Formula,我需要在我的C代码中使用Excel中的NORMSINV公式。我与Excel工作表没有任何联系,也没有从Excel中获取任何值。只需在C#代码中使用公式即可 如何实现这一点 您可以使用GSL(GNU科学库,用C编写)。我相信,与您所追求的功能相对应的功能应该是“gsl_cdf_ugaussian_Pinv” 您可以在此处获取GSL: Excel中函数的详细信息: 以及GSL中的相应详细信息: (注意:标准正态分布也被称为单位高斯分布)我认为这应该计算出你所追求的精确近似值 (注意:我不使用C

我需要在我的C代码中使用Excel中的
NORMSINV
公式。我与Excel工作表没有任何联系,也没有从Excel中获取任何值。只需在C#代码中使用公式即可

如何实现这一点

您可以使用GSL(GNU科学库,用C编写)。我相信,与您所追求的功能相对应的功能应该是“gsl_cdf_ugaussian_Pinv”

您可以在此处获取GSL:

Excel中函数的详细信息:

以及GSL中的相应详细信息:


(注意:标准正态分布也被称为单位高斯分布)

我认为这应该计算出你所追求的精确近似值

(注意:我不使用C语言编程,因此可能存在一些语法错误)

然后您需要调用函数cdf_norm来返回您想要的号码


请测试它的工作情况并让我知道。:)

为了澄清这一点,您需要一些C#代码来执行与normsinv相同的功能,但不实际使用Excel本身?是的。这个公式也可以通过在头文件的c sharp代码中添加一些office工具的引用来实现吗?您需要使用Microsoft.office.Interop.Excel命名空间-IIRC您需要在内存中创建一个电子表格,并从单元格中读取答案。您还需要在运行代码的PC上安装Excel。建议您查看其他答案,以识别具有同等功能的库。我没有在计算机中安装excel,也不确定是否会安装excel。如果您的计算机上可能没有excel,则不能直接使用excel功能。我只想使用此功能。非常感谢,我将检查并让您知道我并不真正了解C#,但由于C99中定义了sqrt、pow和MU PI,那么以下应该可以工作:公共双规范V(double x){return(1/sqrt(MU PI))*exp(-1*(pow(x,2)/2))}显然,实际上C99中删除了MU PI,你还需要自己定义M#PI:#定义M#PI 3.14159265358979323846public double Normsinv(double x){return(1/Math.Sqrt(Math.PI))*Math.Exp(-1*(Math.Pow(x,2)/2))}//这是相等的代码,但我不知道它的正确程度。抱歉,我给了你一个正态分布的PDF,而不是CDF;给我几分钟,我会用C写下适合你的正确方法。我把60作为参数传递给pdf#u norm,并称为cdf#u norm,但我得到了0.4963164,但它应该是0.253double doublenormv=cdf#u norm(pdf#u norm(60));公共双pdf_范数(double x){return(1/Math.Sqrt(Math.PI))*Math.Exp(-1*(Math.Pow(x/100,2)/2));}//因为我通过了百分比值,所以我在数学中将它除以100。Powhow这个呢??60%的输入是0.6,70%的输入是0.7,等等,即cdf_范数(0.6);另外,JavaScript函数看起来很有效,在C#中实现它也应该很容易。JavaScript函数只对少数数字有效,比如70-80%,它正确地给出了答案,但之后该值会减小,例如:如果我给出99.99%,它会给出2.4900160235815867,但它应该是3.71
public double pdf_norm(double x)
{
  return (1 / Math.Sqrt(Math.PI)) * Math.Exp(-1 * (Math.Pow(x, 2) / 2)); 
}

public double cdf_norm(double x)
{
  double[] bValues = [0.2316419, 0.319381530, −0.356563782, 1.781477937, −1.821255978, 1.330274429];

  double t = 1 / (1 + bValues[0]*x);

  return 1 - pdf_norm(x)*(bValues[1]*t + bValues[2]*Math.Pow(t,2) + bValues[3]*Math.Pow(t,3) + bValues[4]*Math.Pow(t,4) + bValues[5]*Math.Pow(t,5));
}