首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Math.Pow( 10,Math.Abs(1))等于10吗?

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

Stack Overflow用户
提问于 2018-03-12 09:46:06
回答 1查看 346关注 0票数 2

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

代码语言:javascript
运行
复制
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呢?是因为不准确还是什么原因?

如果代码更改为:

代码语言:javascript
运行
复制
someResult = (Math.Round(someValue / 10, MidpointRounding.AwayFromZero) * 10 + 10) - someValue;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,并相应地更新,而不实际简化任何这样的代码,可以简化。

然而,真正的原因是纯粹的猜测。如果这是在源代码管理中,可能会有一个提交注释来解释它,或者如果不是,它可能允许您找到作者并询问他们.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49232173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档