用Python导数据到mysql中遇到问题,小数后几位在导入数据库中直接被舍弃

用Python导数据到mysql中遇到问题,小数后几位在导入数据库中直接被舍弃,无论怎么调整float的长度和小数的精度都不行。代码如下:import osimport pymysqlimport sysimport jsonimport numpy as npdb = pymysql.connect('localhost', 'root', '1995711zjz', 'airs_co2_month')cur = db.cursor()file_path = 'D:\\air\\air month(riqi)'try: dirs=os.listdir(file_path) info_list=[] for i in dirs: file_name=os.path.join(file_path,i) #print(file_name) with open(file_name,"r",encoding='utf-8') as f: next(f) for line in f.readlines(): if line: list = [] list = line.strip('\n').split(' ') while '' in list: list.remove('') new_list = [] for n in list: new_list.append(float(n)) list=new_list riqi=list[0] Latitude = list[1] Longitude = list[2] CO2_fraction = list[3] sdev = list[4] #CO2TotalColumn = list[5] sql = """insert into airs_co2_mon (riqi,Latitude,Longitude,CO2_fraction,sdev) values('%d','%f','%f','%f','%f')""" % (riqi, Latitude,Longitude,CO2_fraction,sdev) cur.execute(sql) db.commit()except Exception as e: print(e)finally: cur.close() db.close()sdev这个参数我打印出来都是3.90104e-06这种精度,插入到数据库就变成4e-06.图2是我的数据。CO2_sdev那里变成这样。求问大神应该怎么修改

float本身保存的就是近似值,因为你后面有e-06这样的字符,这个其实也是数字的一部分,这么看,不管你怎么存小数位都是不够的,比如这个3.90104e-06,翻译过来应该是0.00000390194,你估计float的话要怎么写,他是8位的精度,这里来看最好就是0.0000039也就这样了,我想就算这个也不是你要的吧。
所以个人觉得办法就是换一个数据类型,最简单的就是double(我估计16位的精度应该够了吧,不过他和float一样,存一个近似值,你可以试试写成double(16,14)试试,如果还不行,那就只能用decimal了),如果还是进位,那就用decimal(65位的定点数,怎么算都够了。)
如果还不行就祭出终极大招字符型,这个总没有问题,当然如果你还要计算,那就最好别用这个。追问

无论是用double还是decimal导进去的数据都变成了0.00000500000000,0.00000300000000 这样的数字,很奇怪  只有这一组数据这样  其他的都是正常的

                  

    追答

    我在里面看到了insert into airs_co2_mon (riqi,Latitude,Longitude,CO2_fraction,sdev) values('%d','%f','%f','%f','%f')类似语句,
    可能是e-006次方太小了,所以%f并不能完全读出来吧,虽然说%f读的是原值,但是我记得好像在什么地方看过,如果小数点后面第五位没有值,那么这个数值就是一位的约数(记忆并不那么清晰,最好你自己用其他方式试试),前面的e-04则因为有值,所以就能好好的显现出来,后面这个则是太小,所以就不行了,个人觉得可是稍微改一下最后的%f试试。

    温馨提示:答案为网友推荐,仅供参考
    相似回答