假设我有一个整数数组。为了简化起见,让我们在逻辑上将其分为两部分。
假设数组所有元素的总和
是2860800
。
假设 left half
所有元素的总和是 2834387
。
假设右半部分
所有元素的总和是26413
。
现在通过 100m * leftHalfSum/totalSum
计算左半部分的百分比得到 99.07672678970917225950782998
。
同样,100m * rightHalfSum/totalSum
的右半部分百分比为 0.9232732102908277404921700224
。
现在,如果我在 Visual Studio 的 Watch 中添加这两个百分比,它会显示 100
。但是,如果我在 Windows 的 Calculator
应用程序中添加这些,它会给我 100.0000000000000000000000000024
,这是正确的。
基本上,我希望 100-leftHalfPercentage
严格等于 rightHalfPercentage
,反之亦然。如果我在 Watch 中执行 100-leftHalfPercentage
,它会给我 0.92327321029082774049217002
。请注意,它与 rightHalfPercentage
完全相同,但缺少最后两位数字 24
。
谢谢。
最佳答案
您计算的数字是正确的,即它们以相同的精度表示百分比。
如果您希望它们的总和恰好为 100,那么您必须选择一个不太精确的值。您选择牺牲的值(value)将简单地通过从 100 中减去所有其他值(value)来计算。
例如,如果三个相等的组用一位小数计算,每个组将为 33.3%
,总和为 99.9%
。要使总和 100%
,您需要牺牲一组的正确性并将其计算为 100 - 33.3 - 33.3 = 33.4
。
关于c# - 如何使用 C# decimal 计算子数组总和的百分比,使它们的总和严格为 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140975/