python - 使用百分比计算 : decimal or readable?

标签 python django percentage software-design

简单的问题(如果这太基于意见,我们深表歉意): 我应该如何存储百分比?

在编写包含大量分析计算或涉及百分比(返回率、年利率、利润率等)的财务计算的程序时,以下三个选项中哪一个是最佳实践,就性能、可读性、良好性而言代码练习等

  1. 将百分比存储为十进制形式的 float :即 20% = 0.20,并编写一个过滤器在 UI 中对其进行转换。 (在 django 中,这将是一个模板标签,每次显示百分比时都需要应用它)。

  2. 每当需要在后端进行计算时,将百分比存储为整数并除以 100,即 20.13% 存储为 20.13 并像 percent/100 * myNumber 一样使用.

  3. 为 Percent 创建(或使用库)一个数据类型,它可以同时执行这两种操作,例如使用属性“Percent.value”和“Percent.display”的属性装饰属性,该属性乘以 100 并进行舍入。在这个类中,我想象 __str__ 设置为显示值,而所有其他操作都使用原始值。

据我所知,1是最直观的,但似乎不是封装的最佳实践,并且可能导致显示奇数值、调试等错误的问题。2似乎对开发人员来说非常烦人,并可能因此导致错误。选项 3 似乎是不必要的内存开销。

哪个在工业中使用最多,为什么?

最佳答案

我建议按照您的选项 1 进行一些操作。

但是你应该使用Python decimal而不是float库,例如 Django DecimalField将其存储在数据库中。 decimal.Decimal 对象允许固定舍入,这将为您省去很多麻烦。

我建议将百分比存储为乘法所需的值(例如:将 21.56% 存储为 Decimal('0.2156'))。在我看来,最好在需要时改变显示,而不是在计算中进行转换。

是的,Django 中的模板标签听起来是将这些值显示为百分比的好方法。

关于python - 使用百分比计算 : decimal or readable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674675/

相关文章:

python - "WindowsError: [Error 206] The filename or extension is too long"使用子进程多次运行程序后

java - 如何在 Java 循环中和循环外使用 int/double

java - 将整数映射为百分比 [0,100]

django - 嵌套网址不适用于 Django REST 框架

python - Django 模板中的列表未按预期工作

CSS "sticky footer"与嵌套 div 的百分比高度冲突?

python - 如何pandas解析之前保存的json

python django 电子邮件设置正确的发件人 gunicorn

python - sys.getrefcount 继续

django - 升级 django 2.1 => 2.2 后,用户对象 .save() 不保存