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)
它实际上很有趣,因为隐式扩展转换会让你犯错误.
我很确定你提供的"确切代码"不会编译.
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)或......