首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模糊调用Math.Round ( int64 / int64,int)

模糊调用Math.Round ( int64 / int64,int)
EN

Stack Overflow用户
提问于 2014-05-20 15:32:41
回答 2查看 1.4K关注 0票数 1

我想做大量的百分比(int64 :60085145143)

我的实际行动是

代码语言:javascript
复制
a = Math.round(i / 600851475143 * 100, 5);

我也有一个介于1和600851475143之间的int64。如果我是对的,结果将在0,00000%到100,00000%之间。

但是Visual 2013告诉我方法‘System.Math.Round(十进制,int)’和'System.Math.Round(double,int)‘之间的模糊调用。

如果操作中有一些System.Math.Round(十进制,int),那么如何直观地说好的方法是int64?

奖金:为了理解我的问题,我试图解决ProjectEuler.net的问题3:“13195的素因子是5,7,13和29。600851475143的最大素因子是什么?”

我做了我的方法,它适用于13195。但现在我必须使用600851475143 (在x64系统上),但我的algo似乎没有被选择,我想添加一个百分比进度条,以了解我的EXE崩溃是否。我的变量是这个百分比..。

我不想知道尤勒尔问题3的答案,我只需要解决我的百分比问题.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-20 15:35:33

将数字值标记为M后将使其成为十进制值。并使用正确的过载为圆。

代码语言:javascript
复制
var a = Math.Round(i / 600851475143M * 100, 5);
票数 4
EN

Stack Overflow用户

发布于 2014-05-20 15:36:47

如果i是一个整数,那么商是0或1,因为一个整数除以整数在C#中总是一个整数。你是想说

代码语言:javascript
复制
a = Math.round(i / 600851475143.0 * 100.0, 5);

强制计算为双倍,或

代码语言:javascript
复制
a = Math.round(i / 600851475143.0m * 100.0m, 5);

迫使它变成小数。

错误信息是正确的--整数结果应该转换为十进制还是双进制是不明确的。只是没有指出更根本的错误。

顺便说一句,这个错误非常常见。事实上,我的团队正在研制一个静态分析器来检测它。现在删除的答案实际上给出了一种我经常看到的错误形式:

代码语言:javascript
复制
a = Math.round((decimal)(i / 600851475143 * 100), 5);

这消除了歧义--很明显你指的是decimal过载--但是计算是以整数进行的,四舍五入为整数,然后转换为十进制!如果你要加入一个施法,它必须在一个操作数上,而不是在结果上。

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

https://stackoverflow.com/questions/23764195

复制
相关文章

相似问题

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