使用小数类型的 C# 百分比计算会导致问题

C# percent calculation with decimal type causes problems

decimal hundred = 100;
decimal value = 5000;
decimal sum = 1100000;

decimal valuePercentOfSum = value / sum * hundred;        //result = 0.4545454545454545454545454500M
decimal percentOfSum = sum / hundred * valuePercentOfSum; //result = 4999.9999999999999999999999500M

我希望 percentOfSum 的结果是 value (5000)

的原始值

我需要一种方法来进行这样的来回计算,我不能简单地进行任何舍入。

有什么帮助吗?

有人必须舍入(不管你喜不喜欢),因为你在处理无理数 and/or 数值类型,精度有限

如果您使用 double,它会为您 Round,如果您使用 decimal,它会更精确。但是,您将不得不接受这样一个事实:它保留了它所拥有的精度。

根据你想做什么,decimal 可能不太方便,但如果你了解 类型 的后果(并且没有免费的午餐),您可以相应地选择。

如果您使用双精度而不是十进制,您应该会得到更好的结果。

double hundred = 100;
double value = 5000;
double sum = 1100000;

double valuePercentOfSum = value / sum * hundred; 
double percentOfSum = sum / hundred * valuePercentOfSum; // result = 5000