代码之家  ›  专栏  ›  技术社区  ›  chefsmart

python小数-四舍五入到最接近的整美元(不分)-四舍五入

  •  3
  • chefsmart  · 技术社区  · 15 年前

    Decimal.quantize() 实现以下目标:-

    decimal.ROUND_HALF_UP 所以四舍五入后就没有分钱了。

    例如,给定1.25,我试图获得1.00(表示没有美分)

    假设1.49,我试图得到1.00

    假设1.50我想得到2.00

    如果是2.00我想得到2.00

    所以美分有两个范围——0美分到49美分;50美分到99美分。49美分以下,我要四舍五入,50美分以上,我要四舍五入。我试图用两个有效的小数位(总是00)得到结果。

    我在这里没有任何负面价值要处理。我怎样才能把我的钱凑成我想要的数目?除此之外还有其他选择吗 quantize

    2 回复  |  直到 15 年前
        1
  •  7
  •   Mark Dickinson Alexandru    15 年前

    >>> from decimal import Decimal, ROUND_HALF_UP
    >>> x = Decimal('2.47')
    >>> x.quantize(Decimal('1'), rounding=ROUND_HALF_UP).quantize(Decimal('0.01'))
    Decimal('2.00')
    

    x.quantize(Decimal('1'), rounding=ROUND_HALF_UP) 给予 x Decimal('1') )确定 指数 四舍五入的结果,所以如果你用例如。, Decimal('0.1') 取而代之,如果你把它换成 Decimal('1e1') 它会四舍五入到 10

    然后是第二个 quantize Decimal('2.00') 出来而不是仅仅 Decimal(2) .

    你也可以使用 to_integral_value 方法代替第一个量化调用(如果需要):

    >>> x.to_integral_value(rounding=ROUND_HALF_UP).quantize(Decimal('0.01'))
    Decimal('2.00')
    

    我看不出有什么强有力的理由更喜欢哪一种解决方案。

        2
  •  0
  •   James Matthew Mudgett    9 年前

    def currenctyUSD(val):
      valint = int(val)
      if float(val) > float(valint):
        valint = valint + 1
      return '{0:.2f}'.format(float(valint));
    

    如果原始浮点值大于浮点值(int(val)),那么原始浮点值有一些美分:)所以我们需要加1。

    推荐文章