修订日期 | 内容 |
---|---|
2021-2-26 | 初稿 |
13.python基础学习-精度计算(类似java中的BigDecimal)、四舍五入,取整、datetime、time日期与字符串转换的常见操作
高精度计算(类似java中的BigDecimal对象)
float类型计算时可能会出现小数位不确定的情况,推荐使用decimal
# 高精度计算
from decimal import Decimal
f1 = 1.1
f2 = 2.2
print(1.1+2.2) # 3.3000000000000003
print(Decimal(f1)+Decimal(f2)) # 3.300000000000000266453525910 (千万别写成这样)
print(Decimal(str(f1))+Decimal(str(f2))) # 3.3 (推荐)
四舍五入,向上/向下取整
# 四舍五入(方式一) 不推荐
f1 = 3.1415
print(round(f1)) # 3 默认整数
print(round(f1,2)) # 3.14
print(round(f1,3)) # 3.142
print(round(f1,5)) # 3.1415 (以最高实际位数为准,不会补0)
print('===========')
# 四舍五入(方式二)
print('%.5f' % f1) # 3.14150
print('%.3f' % f1) # 3.142
print('%.2f' % f1) # 3.14
print('===========')
# 四舍五入(方式三)
print(format(f1,'.5f')) # 3.14150
print(format(f1,'.3f')) # 3.142
print(format(f1,'.2f')) # 3.14
import math
# 向上取整
print(math.ceil(f1))
# 向下取整
print(math.floor(f1))
日期时间字符串转换的常用操作
import datetime
import time
#
print(datetime.datetime.now()) # 2021-02-26 00:12:21.926747
today = datetime.date.today()
print(type(today),today) # <class 'datetime.date'> 2021-02-26
# 日期转字符串
print(type(str(today)),str(today)) # <class 'str'> 2021-02-26
d = datetime.date(2008,8,8)
print(type(d),d) # <class 'datetime.date'> 2008-08-08
# 时间
t = time.time()
print(type(t),t) # <class 'float'> 1614269869.7454202
time_stamp = 1614269869.7454202
d2 = datetime.date.fromtimestamp(time_stamp)
print(type(d2),d2) # <class 'datetime.date'> 2021-02-26
# 年月日
print(d2.year,d2.month,d2.day) # 2021 2 26
# 替换方法
print(d2.replace(2022,2,1)) # 2022-02-01
#print(d2.replace(2022,13,1)) # 报错
# 星期几 0表示周一,
print(d2,d2.weekday()) # 2021-02-26 4 表示周五
# 标准日期格式 -
print(type(d2.isoformat()), d2.isoformat()) # <class 'str'> 2021-02-26
# 转成字符串
print(d2.strftime('%Y年%m月%d日')) # 2021年02月26日
# 创建时间
t1 = datetime.time(18,30,15)
print(type(t1),t1) # <class 'datetime.time'> 18:30:15
# 单独获取时、分、秒、毫秒
print(t1.hour,t1.minute,t1.second,t1.microsecond) # 18 30 15 0
print(t1.isoformat()) # 标准时间(有毫秒时也会输出毫秒)18:30:15
print(t1.strftime('%H时%M分%S秒 %f微秒')) # 18时30分15秒 000000微秒
# 字符串转换成日期时间
print('=====字符串转换成日期时间=======')
d3 = datetime.datetime.strptime('2021-02-26 18:30:01','%Y-%m-%d %H:%M:%S')
print(type(d3),d3) # <class 'datetime.datetime'> 2021-02-26 18:30:01
# 时间差
#1.先生成时间差对象
dt_d = datetime.timedelta(days=365)
dt_m = datetime.timedelta(weeks=1)
dt_d = datetime.timedelta(days=-1) # 一天前
print(dt_d.days) # -1
now = datetime.datetime.now()
print(now.strftime('%Y年%m月%d日 %H时%M分%S秒')) # 2021年02月26日 00时55分10秒
print((now+dt_d).strftime('%Y年%m月%d日 %H时%M分%S秒')) # 2021年02月25日 00时56分09秒(一天前的时间)
print(now - (now+dt_d)) # 1 day, 0:00:00