使用百分比进行计算:小数还是可读?

时间:2019-02-13 16:12:13

标签: python django percentage software-design

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

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

  1. 以小数形式将百分比存储为浮点数:即20%= 0.20,并编写一个过滤器以在UI中进行转换。 (在django中,这将是一个模板标签,每次分配百分比时都需要应用该模板标签。)

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

    < / li>
  3. 为Percent创建(或使用库)数据类型,这两种方法都可以做到,例如,将属性“ Percent.value”与属性装饰的属性“ Percent.display”相乘100并舍入。在该类中,我想象__str__设置为显示值,而所有其他操作都使用原始值。

据我所知,1是最直观的方法,但似乎不是封装的最佳实践,并且可能导致出现显示奇数值,调试等错误的问题。2对于开发人员而言,这似乎是令人讨厌的烦恼,并因此可能导致错误。选项3似乎是不必要的内存开销。

哪个行业使用最多?为什么?

1 个答案:

答案 0 :(得分:1)

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

但是您应该使用Pythons decimal库而不是float库,例如使用Djangos DecimalField库将其存储在数据库中。 decimal.Decimal对象允许进行固定的舍入,这将使您免于头疼。

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

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