V2EX 首页   注册   登入
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请 登入
Sponsored by
唐茶 字节社
中文世界最好的电子书城
V2EX  ›  Python

关于小数的问题

By kingwkb at 142 天前, 617 次点击
>>> a = 0.1
>>> b = decimal.Decimal(0.1)
>>> a
0.1
>>> b
Decimal('0.1000000000000000055511151231257827021181583404541015625')


和理论是不是反了?
4 回复  |  直到 2012-01-04 20:42:01 PM
    1
xiaket   142 天前
偶这儿的Python拒绝将浮点数转成Decimal:

>>> a = decimal.Decimal("0.1")
>>> a
Decimal('0.1')

实际上是你理解错了.
    2
kingwkb   142 天前
@xiaket 谢谢,使用浮点不会遇到问题么? python中处理金额也用浮点?
    3
xiaket   142 天前
做浮点计算需要注意在进行某些计算时可能会有比较大的问题, 一个典型的(但事实上说明不了什么问题的)例子是当a比较大时, 计算sqrt(a+1) - sqrt(a)可能得到的结果不尽如人意. 这个时候如果转成计算1/(sqrt(a) + sqrt(a+1))会有更好的结果(虽然这种转换会多做一次除法计算, 计算量大了一点点).
    4
keakon   141 天前
Decimal可以设置精度的,金融计算时本来就要四舍五入到最小金额。你看下文档再问吧
http://docs.python.org/library/decimal.html
Linode
关于   |   FAQ   |   我们的愿景   |   广告投放   |   工作空间   |   Gadget Lab   |   博客   |   上网首页   |   294 人在线   最高记录 362
创意工作者们的社区
Lovingly made by OLIVIDA
VERSION: 3.0.0-dev
♥ Do have a faith in what you're doing.