PythonV2.6是否用小数(货币)取整?

PythonV2.6是否用小数(货币)取整?,python,Python,因此,我对Python非常陌生,对取整有一个问题 product_price = '79.98' subtotal = Decimal(product_price) cal_tax = '0.0825' tax_conv = Decimal(cal_tax) tax_total = subtotal * tax_conv total_tax = round(tax_total, 2) print total_tax self.assertEqual(total_tax, '6.60') 总纳税

因此,我对Python非常陌生,对取整有一个问题

product_price = '79.98'
subtotal = Decimal(product_price)
cal_tax = '0.0825'
tax_conv = Decimal(cal_tax)
tax_total = subtotal * tax_conv
total_tax = round(tax_total, 2)
print total_tax
self.assertEqual(total_tax, '6.60')
总纳税申报表
6.6
,且断言失败:

AssertionError: u'6.60' != 6.5999999999999996

我确信我犯了一个新手错误。我希望通过我的断言,将本例中的“总税”四舍五入至6.60。如果有人能给我一些建议,我将不胜感激。再次感谢

不要对小数使用
round
round
返回
float
。使用
量化

total_tax = tax_total.quantize(Decimal('0.01'))
然后将其与另一个
十进制
进行比较:

self.assertEqual(total_tax, Decimal('6.60'))

如果您想严格地四舍五入,请按如下方式量化:

from decimal import Decimal, ROUND_UP
total_tax = tax_total.quantize(Decimal('0.01'), rounding=ROUND_UP)

不要对小数使用
round
round
返回
float
。使用
量化

total_tax = tax_total.quantize(Decimal('0.01'))
然后将其与另一个
十进制
进行比较:

self.assertEqual(total_tax, Decimal('6.60'))

如果您想严格地四舍五入,请按如下方式量化:

from decimal import Decimal, ROUND_UP
total_tax = tax_total.quantize(Decimal('0.01'), rounding=ROUND_UP)

round
返回的浮点数不能准确表示数字
6.6
。然后你将它与一个字符串进行比较,这使得比较也失败了。。。(因为字符串和浮点数永远不会比较相等)

round
返回的浮点数不能准确表示数字
6.6
。然后你将它与一个字符串进行比较,这使得比较也失败了。。。(因为字符串和浮点永远不会比较相等)

您正在比较字符串和浮点值

您有两个选择:

  • total_tax
    格式化为字符串;这将自动将浮点值舍入到所需的位数:

    self.assertEqual(format(total_tax, '.02f'), '6.60')
    
  • total_tax
    值与浮点文字进行比较,但要有公差(因为浮点不精确):

    self.assertTrue((总税费-6.60)<0.01)
    

  • 您正在比较字符串和浮点值

    您有两个选择:

  • total_tax
    格式化为字符串;这将自动将浮点值舍入到所需的位数:

    self.assertEqual(format(total_tax, '.02f'), '6.60')
    
  • total_tax
    值与浮点文字进行比较,但要有公差(因为浮点不精确):

    self.assertTrue((总税费-6.60)<0.01)
    

  • 哇!!谢谢大家的快速回复!哇!!谢谢大家的快速回复!