python的round怎么不准?时而有效时而无效?

2022-03-23  本文已影响0人  wyude

decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持
python 标准库 decimal:Decimal可用来保存具有小数点而且数值确定的数值,它不像float和real是用来保存近似值
1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。

>>> 0.1+0.1
0.2
>>> 0.1+0.2
0.30000000000000004
#二进制表示浮点数就是不准确的

2.要从浮点数据转换为Decimal类型

from decimal import * 
Decimal.from_float(12.222)
#结果为Decimal('12.2219999999999995310417943983338773250579833984375')
#这个是因为传到 Decimal() 里的就已经不是一个精确的数值了
#要正确转换就要先把浮点转为字符串

3.通过设定有效数字,限定结果样式

from decimal import * 
getcontext().prec = 6 
Decimal(1)/Decimal(7)
 # 结果为Decimal('0.142857'),六个有效数字

4.四舍五入,保留几位小数

from decimal import * 
Decimal('50.5679').quantize(Decimal('0.00')) 
# 结果为Decimal('50.57'),结果四舍五入保留了两位小数

5.Decimal 结果转化为string

from decimal import * 
str(Decimal('3.40').quantize(Decimal('0.0'))) # 结果为'3.4',字符串类型
上一篇下一篇

猜你喜欢

热点阅读