python-DB-decimal数据类型数据库中字段类型为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,打印字典类型,可以解决
decimal是整数数据类型解决⽅案三:转成字符串,因存在0.0,0.00这种,较⿇烦,未尝试,理论上应该可以
ps:
使⽤pandas读取数据库:
import pymysql  # 或import MySQLdb
import pandas as pd
def pdsql(sql):
# 使⽤pandas操作数据库
db = t('192.168.3.77', 'user', 'passwd', 'db_name', charset='utf8')    res = pd.read_sql(sql, db)  # 以DataFrame⽅式读取数据库
res = _dict('records')
print(res)  # 打印字典类型 [{'订单⾦额': 1.0,'下单时间': '2020-12-08 19:50:35'}]
db.close()
return res

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。