等式总是返回0.0

时间:2014-01-25 02:05:02

标签: c# math double

我希望有人可以帮我解决一些错字问题吗?

我试图执行这个等式:

66 * (1 - Math.Exp((-1) / 42)) + 0.0 * (Math.Exp((-1) / 42))

这是人类正常的写作方式:

66 * (1-e^(-1/42) + 0.0 * (e^(-1/42)

我做错了什么,因为我总是得到0.0?

3 个答案:

答案 0 :(得分:4)

通过在数字中明确使用小数位来告诉编译器您要使用浮点数:

66.0 * (1.0 - Math.Exp((-1.0) / 42.0)) + 0.0 * (Math.Exp((-1.0) / 42.0))

或指定类型:

66d * (1d - Math.Exp((-1d) / 42d)) + 0.0d * (Math.Exp((-1d) / 42d))

答案 1 :(得分:1)

你的师使用了2个整数。因此,-1 / 42 = 0.xxx由于整数(-1和42)而为0。您应该使用double来获得正确的答案。

因此,这是有效的:double result = 66.0 * (1 - Math.Exp((-1.0) / 42.0) + 0.0 * (Math.Exp((-1.0) / 42.0)));

答案 2 :(得分:1)

你正在使用整数并且由于四舍五入而得到0。使用例如:

double r = 66 * (1 - Math.Exp((-1.0d) / 42.0d)) + 0*_whatever_;

关键是-1/42舍入为0(整数),所以你的exp()最终为1.然而,double d = -1.0d/42.0d会得到你所期望的。