在 C# (^) 符号中使用 Excel 公式

我试图将此 excel 代码转换为 c#


IF(D5=F5,ROUND(((SQRT(F5) +0.0833) ^2),0)

我得到的 excel 文件的输出是 19423


但是当我对 c# 使用相同的代码时


D5 = 19400.25

F5 = 19400.25

string s = Math.Round(Convert.ToDecimal(Convert.ToInt32((Math.Sqrt(F5) + 0.0833)) ^ 2)).ToString();

我得到的输出为 137。我不知道我哪里出错了,我尝试了每件事,但都被困在这件事上。有人可以帮我吗?谢谢是提前。


梵蒂冈之花
浏览 238回答 3
3回答

慕侠2389804

该^符号与 Excel 中的幂函数不同。你不能只是一对一地翻译这个。C#^符号执行按位异或。您应该用于翻译此函数的实际 C# 代码:result = Math.Pow(Math.Sqrt(F5) + 0.0833, 2);

开满天机

让我们分解你的 c# 代码:D5 = 19400.25F5 = 19400.25string s = Math.Round(Convert.ToDecimal(Convert.ToInt32((Math.Sqrt(F5) + 0.0833)) ^ 2)).ToString();//                   î                 î               îî__ are closed here ___îî    îî//                   |                 |______________ is closed here _______________||//                   |_________________________ is closed here _______________________|所以基本上,您正在转换为int以下内容:Math.Sqrt(F5) + 0.0833 // 139.36[...]这导致四舍五入,因此139。然后^2按照 Patrick Hofman 的说法应用(按位异或),结果为137.然后您将其转换为十进制,并对其进行四舍五入,这实际上并没有太大作用......在 Excel 中,你是 square Sqrt(F5) + 0.0833,这在 c# 中是这样写的:Math.Pow(Math.Sqrt(F5)+0.0833,2)然后你把它圆了。因此,只需将其包装在一个Math.Round:Math.Round(Math.Pow(Math.Sqrt(F5)+0.0833,2))但是你只有在D5等于时才这样做F5:D5 == F5 ? Math.Round(Math.Pow(Math.Sqrt(F5)+0.0833,2)) : 0

拉丁的传说

D5 = 19400.25F5 = 19400.25double R =  (D5 == F5) ? Math.Pow(Math.Sqrt(F5) + +0.0833, 2) : 0;String s = Math.Round(R, 0).ToString();但要注意的是,病情,D5 == F5已经很可疑了。浮点类型的相等性很容易被四舍五入所愚弄。
打开App,查看更多内容
随时随地看视频慕课网APP