我目前正在维护一位前同事的代码,并发现以下代码(示例):
double someValue = 20, someResult;
someResult = (Convert.ToInt32(Math.Round(someValue / (Math.Pow(10, Math.Abs(1))), MidpointRounding.AwayFromZero) * Math.Pow(10, Math.Abs(1))) + 10) - someValue;我想知道,为什么他用Math.Pow(10, Math.Abs(1))而不是10呢?是因为不准确还是什么原因?
如果代码更改为:
someResult = (Math.Round(someValue / 10, MidpointRounding.AwayFromZero) * 10 + 10) - someValue;发布于 2018-03-12 09:51:12
使用10而不是(Math.Pow(10, Math.Abs(1))之间唯一的区别是类型。如果您用代码编写10,编译器将将该数字视为int。然而,Math.Pow将返回一个double。
有时这可能会带来不同的结果。例如,如果someValue是一个int,那么someValue/10将使用整数除法,因此可能无法达到预期的效果。在这种情况下,尽管someValue是一个double,所以您可以使用浮点除法。
所以是的,您在这里可以安全地将Math.Pow调用替换为10。
至于为什么会出现这样的情况,我通常会发现这类代码的存在是因为它最初更复杂,然后得到了简化。最初可能是类似于Math.Pow(10,precision),或者类似于需要调用方法的东西。然后,有人决定总是使精度1,并相应地更新,而不实际简化任何这样的代码,可以简化。
然而,真正的原因是纯粹的猜测。如果这是在源代码管理中,可能会有一个提交注释来解释它,或者如果不是,它可能允许您找到作者并询问他们.
https://stackoverflow.com/questions/49232173
复制相似问题