繁体   English   中英

Math.Pow(10,Math.Abs​​(1))等于10吗?

[英]Is Math.Pow(10, Math.Abs(1)) equal to 10?

我目前正在维护一个前同事的代码,并发现以下代码(示例):

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;

使用10代替(Math.Pow(10, Math.Abs(1))的唯一区别是类型。如果在代码中写入10 ,编译器会将数字视为int但是Math.Pow将返回a double

有时这可能会有所作为。 例如,如果someValue是一个intsomeValue/10将使用整数除法,因此可能无法达到您的期望。 在这种情况下,尽管someValuedouble someValue的,所以您将以任何一种方式使用浮点除法。

所以是的,您可以放心地用10代替Math.Pow调用。

至于为什么这样-我经常发现这种代码存在是因为它本来更复杂,然后又简化了。 例如,最初可能是Math.Pow(10,precision)东西,或者可能需要方法调用的东西。 然后,有人决定始终使精度为1并相应地进行更新,而实际上并未简化任何可以简化的代码。

实际的原因虽然是纯粹的猜测。 如果这在源代码管理中,则可能会有一个提交注释对此进行解释,否则,您可能会找到作者并询问他们...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM