c#十进制精度函数

本文关键字:函数 精度 十进制 | 更新日期: 2023-09-27 18:03:16

我有一个十进制函数:

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.00073918549时,我得到一个0

c#十进制精度函数

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

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

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

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

考虑将你的股息(甚至只是它的前导项)分配给decimal (System.Decimal)。然后,所有其他long值将自动"提升"到decimal

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