我想做大量的百分比(int64 :60085145143)
我的实际行动是
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的答案,我只需要解决我的百分比问题.
发布于 2014-05-20 15:35:33
将数字值标记为M后将使其成为十进制值。并使用正确的过载为圆。
var a = Math.Round(i / 600851475143M * 100, 5);发布于 2014-05-20 15:36:47
如果i是一个整数,那么商是0或1,因为一个整数除以整数在C#中总是一个整数。你是想说
a = Math.round(i / 600851475143.0 * 100.0, 5);强制计算为双倍,或
a = Math.round(i / 600851475143.0m * 100.0m, 5);迫使它变成小数。
错误信息是正确的--整数结果应该转换为十进制还是双进制是不明确的。只是没有指出更根本的错误。
顺便说一句,这个错误非常常见。事实上,我的团队正在研制一个静态分析器来检测它。现在删除的答案实际上给出了一种我经常看到的错误形式:
a = Math.round((decimal)(i / 600851475143 * 100), 5);这消除了歧义--很明显你指的是decimal过载--但是计算是以整数进行的,四舍五入为整数,然后转换为十进制!如果你要加入一个施法,它必须在一个操作数上,而不是在结果上。
https://stackoverflow.com/questions/23764195
复制相似问题