C#小数精度函数

时间:2013-03-10 15:00:46

标签: c# math precision

我有一个小数函数:

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

那是因为你正在使用整数除法,它会截断结果。使用return ((decimal)(36100000 - 3580000 )/((decimal)(44000000000 - 5630000)));进行十进制除法。

答案 2 :(得分:0)

您的所有算术都是使用longSystem.Int64)完成的,这是整数类型。只有在除法完成后(给出整数结果),商才会转换为decimal

考虑将您的红利(或者甚至只是它的主导词)投射到decimalSystem.Decimal)。然后,所有其他long值将在此过程中自动“提升”为decimal

当然,您可以改为将一个参数(或所有参数)更改为类型decimal。将long类型的表达式转换为类型为decimal的方法参数时,不需要显式强制转换。