数据库中字段类型为bigint,值为1,除以100后读取出来,打印显示:Decimal('0.01')
和数字0.01比较,断言不通过
学习以下decimal相关知识:
#1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。 data = Decimal(1) # 1 data = Decimal(0.01) # 0.01000000000000000020816681711721685132943093776702880859375 #2.从浮点数据转换为Decimal类型 data = Decimal.from_float(12.222) # 12.2219999999999995310417943983338773250579833984375 #3.限定5位有效数字 getcontext().prec = 5 data = 1/7 # 0.14285714285714285 data = Decimal(1)/Decimal(7) # 0.14286(四舍五入) data = Decimal(100)/Decimal(7) # 14.286 #4.四舍五入,保留2位小数 data = Decimal('50.5679').quantize(Decimal('0.00')) # 50.57 data = Decimal(1/100).quantize(Decimal('0.00')) # 0.01 #5. Decimal转化为string类型 data = str(Decimal('3.457').quantize(Decimal('0.00'))) # 3.46
几种断言:
self.assertEqual(0.01, Decimal(0.01)) # 通过 self.assertEqual(0.01, Decimal('0.01')) # 不通过 self.assertEqual('0.0', '0.00') # 不通过 self.assertEqual('0.01', '0.01') # 通过(字符串和字符串) self.assertEqual(0.01, 0.01) # 通过(数字和数字) self.assertEqual(0.01, '0.01') # 不通过(数字和字符串)
以上为纯知识,未解决实际问题。。。
最后,
解决方案一:数据库中读取的数字不除以100,需断言比较的数字乘以100,可以解决
解决方案二:换读取数据库方法,使用pandas,打印字典类型,可以解决
解决方案三:转成字符串,因存在0.0,0.00这种,较麻烦,未尝试,理论上应该可以
ps:
使用pandas读取数据库:
import pymysql # 或import MySQLdb import pandas as pd def pdsql(sql): # 使用pandas操作数据库 db = pymysql.connect('192.168.3.77', 'user', 'passwd', 'db_name', charset='utf8') res = pd.read_sql(sql, db) # 以DataFrame方式读取数据库 res = res.to_dict('records') print(res) # 打印字典类型 [{'订单金额': 1.0,'下单时间': '2020-12-08 19:50:35'}] db.close() return res