小数的第N个根在C#中返回意外结果

JK.*_*JK. 5 .net c# math floating-point

当我尝试使用C#取一小部分的第N个根时,我得到一个错误的数字.

例如,当我尝试采用1.07的第三个根时,我得到1,这显然不是真的.

这是我用来获取第三个根的确切代码.

MessageBox.Show(Math.Pow(1.07,(1/3)).toString());
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

我猜这是一个浮点运算问题,但我不知道如何处理它.

Yur*_*ich 13

C#将1和3视为整数,您需要执行以下操作:

Math.Pow(1.07,(1d/3d))
Run Code Online (Sandbox Code Playgroud)

要么

Math.Pow(1.07,(1.0/3.0))
Run Code Online (Sandbox Code Playgroud)

它实际上很有趣,因为隐式扩展转换会让你犯错误.


I. *_*edy 9

我很确定你提供的"确切代码"不会编译.

MessageBox.Show(Math.Pow(1.07,(1/3).toString()));
Run Code Online (Sandbox Code Playgroud)

对toString的调用是在错误的嵌套级别,需要是ToString,而(1/3)是整数除法,这可能是你遇到的真正问题.(1/3)为0,第零次幂为1.你需要使用(1.0/3.0)或(1d/3d)或......

  • 我通常不会指出一个明显的语法错误,但不知何故感到有义务,因为你不屑于使用"确切"这个词.很高兴它有所帮助. (6认同)