BigInteger的除法和舍入

本文关键字:舍入 除法 BigInteger | 更新日期: 2023-09-27 18:25:08

我正在尝试创建一个小数集,小数精度四舍五入到小数点后2位。然而,这个集合有一些巨大的数字,我不得不使用BigInteger作为解决方案。

具体内容:-得到一个包含BigIntegers的集合-获得另一个BigIntegers集合-得到第三个大整数集合-我必须创建一个集合,它具有以上3个集合的平均值,值四舍五入到小数点后2位。即,如果集合1有{2,3,4},集合2有{4,5,5},集合3有{5,3,2},我应该创建第四个集合,该集合具有{3.67,3.67,3.67}

为此,我使用了以下代码:

     BigInteger divisor = new BigInteger(3.0d);
     var averages = collection1.Zip(collection2, BigInteger.Add)
                    .Zip(collection3, 
                    (xy, z) => BigInteger.Divide(BigInteger.Add(xy,z), divisor));

然而,小数并没有出现。我不确定biginteger是否只能包含整数值而不能包含十进制值。

你能提出一个解决方案吗?

注意:它必须是基于LINQ的,因为集合非常大,有一些大值(因此是biginteger)。

BigInteger的除法和舍入

您不会得到任何十进制值,因为BigInteger只表示整数

decimal大到可以容纳你感兴趣的号码吗?

如果不是,您可能需要考虑将everthing乘以100,并固定格式,使"1500"显示为"15.00"等。您仍然需要做一些工作,以".67"而不是".66"结束三分之二的结果,因为当它被截断而不是四舍五入时,这将是除法的自然结果。

除以三后的余数将是.00、.33或.67。您应该能够确定这三个值中的哪一个是合适的。然而,我不确定你会如何让你的集合存储东西,因为支持分数的数字类型将无法保存你的结果,除非你想定义一个"大整数加小分数"类型或将你的数字存储为字符串。