如何计算子阵的总和的百分比,这样它们的总和是100严格使用C#十进制(How to calculat

2019-09-21 17:29发布

比方说,我有一个整数数组。 让我们在逻辑上划分成只是两部分的简化。

比方说, total sum阵列中的所有元素是2860800

比方说,所有要素的总和left half2834387

比方说,所有元素的和right half26413

现在,通过计算左半部分的比例100m * leftHalfSum / totalSum99.07672678970917225950782998

同样,右半边的百分比100m * rightHalfSum / totalSum0.9232732102908277404921700224

现在,如果我加入Visual Studio的观看这两个百分数,它表明我100 。 但是,如果我在添加这些Calculator应用程序在Windows中,它给了我100.0000000000000000000000000024 ,这是正确的。

基本上,我想100-leftHalfPercentage要严格等于rightHalfPercentage ,反之亦然。 如果我做100-leftHalfPercentage在关注,它给了我0.92327321029082774049217002 。 请注意,这是完全一样rightHalfPercentage但最后两位数字24人失踪。

谢谢。

Answer 1:

你已经计算出的数字是正确的,即它们代表了相同的精确度百分比他们。

如果你希望自己的款项,恰好是100,那么你必须选择其中一个值是那么精确。 你选择牺牲的价值只会用100减去所有其他的值来计算。

例如,具有与一个小数计算会给你三个相等的组33.3%的每个,给你的总和99.9% 为了使之和100%你会牺牲正确性为一组,并计算出它作为100 - 33.3 - 33.3 = 33.4



Answer 2:

小数有28-29显著数字(最大精度源 )。 你计算的全部结果将是30位长,多为小数! 这就是为什么省略了最后两位数字。

如果您的结果将是更大(10.000总和,而不是100为例)甚至更多的数字将被省略。

所不同的可能是由一些内因和可能会有人比我更了解需要编译代码的一些检查。



文章来源: How to calculate percentages of sum of sub-arrays so that their sum is strictly 100 using C# decimal