我有一个小数函数:
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
答案 0 :(得分:2)
你正在进行整数除法,它只能返回一个截断的整数。
您需要将一个操作数强制转换为非整数类型(可能是decimal
)。
答案 1 :(得分:2)
那是因为你正在使用整数除法,它会截断结果。使用return ((decimal)(36100000 - 3580000 )/((decimal)(44000000000 - 5630000)));
进行十进制除法。
答案 2 :(得分:0)
您的所有算术都是使用long
(System.Int64
)完成的,这是整数类型。只有在除法完成后(给出整数结果),商才会转换为decimal
。
考虑将您的红利(或者甚至只是它的主导词)投射到decimal
(System.Decimal
)。然后,所有其他long
值将在此过程中自动“提升”为decimal
。
当然,您可以改为将一个参数(或所有参数)更改为类型decimal
。将long
类型的表达式转换为类型为decimal
的方法参数时,不需要显式强制转换。