gpt4 book ai didi

c# - 模棱两可的调用 Math.Round ( int64/int64, int)

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:45 24 4
gpt4 key购买 nike

我想用大数字做百分比(int64:600 851 475 143)

我的实际操作是

a = Math.round(i / 600851475143 * 100, 5);

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

但是 Visual Studio Express 2013 告诉我,方法“System.Math.Round(decimal, int)”和“System.Math.Round(double, int)”之间的调用不明确。

即使有一些 int64 在运算中,如何对视觉说好的方法是 System.Math.Round(decimal, int)?

奖金:为了理解我的问题,我正在尝试解决 ProjectEuler.net 的问题 3:“13195 的质因数是 5、7、13 和 29。数 600851475143 的最大质因数是多少?”

我做了我的方法,它适用于 13195。但现在我必须使用 600851475143(在 x64 系统上),但我的算法似乎没有优化,我想添加一个百分比进度条来了解我的EXE 崩溃与否。我的 var 是这个百分比...

我不想要 Euleur 问题 3 的答案,我只需要解决我的百分比问题...

最佳答案

如果 i 是整数,则商为零或一,因为在 C# 中整数除以整数始终是整数。你是想说

a = Math.round(i / 600851475143.0 * 100.0, 5);

强制计算为 double ,或者

a = Math.round(i / 600851475143.0m * 100.0m, 5);

这强制它是小数。

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

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

a = Math.round((decimal)(i / 600851475143 * 100), 5);

这消除了歧义——显然你的意思是 decimal 重载——但计算是用整数完成的,四舍五入为整数,然后然后转换为十进制!如果您要进行强制转换,它必须位于操作数 之一,而不是结果

关于c# - 模棱两可的调用 Math.Round ( int64/int64, int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com