[英]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
是一个int
则someValue/10
将使用整数除法,因此可能无法达到您的期望。 在这种情况下,尽管someValue
是double
someValue
的,所以您将以任何一种方式使用浮点除法。
所以是的,您可以放心地用10
代替Math.Pow
调用。
至于为什么这样-我经常发现这种代码存在是因为它本来更复杂,然后又简化了。 例如,最初可能是Math.Pow(10,precision)
东西,或者可能需要方法调用的东西。 然后,有人决定始终使精度为1并相应地进行更新,而实际上并未简化任何可以简化的代码。
实际的原因虽然是纯粹的猜测。 如果这在源代码管理中,则可能会有一个提交注释对此进行解释,否则,您可能会找到作者并询问他们...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.