0

我有一个十进制函数:

public decimal NGD(long TotalPages, long XHits, long YHits, long BothHits)
{
    return ((Math.Max(XHits, YHits)-BothHits)/(TotalPages - Math.Min(XHits, YHits)));
}

在打印参数时,我得到 NGD(44000000000,36100000,5630000,3580000) 这意味着return ((36100000 - 3580000 )/(44000000000 - 5630000));在我的应用程序中我得到一个 0,而它应该是 0.00073918549

4

3 回答 3

2

你正在做整数除法,它只能返回一个截断的整数。

您需要将一个操作数转换为非整数类型(可能decimal)。

于 2013-03-10T15:02:04.500 回答
2

那是因为您使用的是整数除法,这会截断结果。用于return ((decimal)(36100000 - 3580000 )/((decimal)(44000000000 - 5630000)));小数除法。

于 2013-03-10T15:03:01.220 回答
0

你所有的算术都是用long( System.Int64) 完成的,它是一个整数类型。只有在除法完成(给出整数结果)后,商才会转换为decimal.

考虑将您的红利(或什至只是它的前导项)分配给decimal( System.Decimal)。然后所有其他long值将在此过程中自动“提升” decimal

当然,您可以改为将一个参数(或所有参数)更改为具有 type decimallong将 type 的表达式转换为 type的方法参数不需要显式转换decimal

于 2013-03-10T15:04:19.327 回答