我正在尝试创建一个具有小数的集合,其精度四舍五入到小数点后两位。然而,该集合有一些巨大的数字,我必须使用BigInteger作为解决方案。
具体内容: - 有一个有BigIntegers的集合 - 获得了另一个BigIntegers集合 - 获得了第三个大整数集合 - 我必须创建一个具有上述3个集合的平均值的集合,其值被舍入到2个小数位。 即如果collection1有{2,3,4}而collection2有{4,5,5}且collection3有{5,3,2}我应该创建第4个集合,其中{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的,因为集合非常庞大,有一些大的值(因此也是大整数)。
答案 0 :(得分:2)
嗯,你没有得到任何小数值,因为BigInteger
只代表整数。
decimal
大到足以容纳你感兴趣的号码吗?
如果没有,您可能需要考虑将everthing乘以100,并修复格式化方面,使“1500”显示为“15.00”等。您仍然需要做一些工作才能最终得到“对于三分之二的结果,.67“而不是”.66“,因为当它被截断而不是舍入时,这将是除法的自然结果。
答案 1 :(得分:0)
除以3后的残留量为.00,.33或.67。您应该能够确定这三个值中的哪一个是合适的。我不确定你想如何让你的集合存储东西,但是,假设支持分数的数字类型将无法保存你的结果,除非你想定义一个“大整数加小分数”类型或将您的号码存储为字符串。