鱼C论坛

 找回密码
 立即注册
查看: 848|回复: 2

关于小数精度的问题

[复制链接]
发表于 2019-6-2 16:40:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from decimal import getcontext,Decimal

getcontext().prec = 3   #设置精度值为3

f = 12.23435521    #type(f) : float
value = Decimal(str(f))  #value: Decimal('12.23435521')
#或:value = Decimal.from_float(f)
print value*1  #Decimal('12.2')————————————————————————————————————————————别人的案例

from decimal import Decimal
decimal.getcontext().prec=2
f=1.345671232121212
v=Decimal(str(f))
print(v) ————————————————————————————————为什么我的结果是1.345671232121212

然而,from decimal import Decimal
decimal.getcontext().prec=2
Decimal(0.2)+Decimal(0.3)—————————————————————————在这里为啥结果就正确显示为Decimal(‘0.50’)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-2 16:57:45 | 显示全部楼层
突然发现差别,因为别人的案例中存在小数的运算表达式,即print中的 value*1
也就是说,对小数精度的限制,只能发生在运算表达式中。。。。。。

不知道我这么理解对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-2 17:05:13 | 显示全部楼层
在python的说明文档中https://docs.python.org/zh-cn/3/library/decimal.html,介绍:
“”3.3 新版功能.

新 Decimal 的重要性仅由输入的位数决定。 上下文精度和舍入仅在算术运算期间发挥作用。
即有计算才体现位数,改成print(v + 0)就是2位精度显示了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 04:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表