PythonV2.6是否用小数(货币)取整?
因此,我对Python非常陌生,对取整有一个问题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') 总纳税
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)
哇!!谢谢大家的快速回复!哇!!谢谢大家的快速回复!