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

标签 c# math decimal percentage

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) 的原始值

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

有什么帮助吗?

最佳答案

当您处理无理数和/或数值类型时,必须有人舍入(无论您喜欢与否)精度有限

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

根据您想要执行的操作,小数 可能不太方便,但如果您了解这两种类型 的后果(并且天下没有免费的午餐) ,您可以相应地进行选择。

关于使用小数类型的 C# 百分比计算会导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49170601/

相关文章:

c# - "Reset"类中随机

algorithm - 如何生成相关的二元变量

ruby - 条件下所有可能的排列

javascript - 接受最大 99.99 的十进制值

Python十进制到字符串

c# - Entity Framework 不保存所有更改

c# - 通过最大化按钮调整表单大小时未触发ResizeEnd事件?

c++ - 方程式相等性测试(在C++或Unix工具中)(代数函数同构)

matlab - 在 Matlab 中将十进制数组转换为十六进制数组

c# - 以编程方式切换屏幕后如何使表单居中