V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kingwkb
V2EX  ›  Python

关于小数的问题

  •  
  •   kingwkb · 2012-01-02 19:47:21 +08:00 · 3742 次点击
    这是一个创建于 4710 天前的主题,其中的信息可能已经有所发展或是发生改变。
    >>> a = 0.1
    >>> b = decimal.Decimal(0.1)
    >>> a
    0.1
    >>> b
    Decimal('0.1000000000000000055511151231257827021181583404541015625')


    和理论是不是反了?
    4 条回复    1970-01-01 08:00:00 +08:00
    xiaket
        1
    xiaket  
       2012-01-02 19:52:02 +08:00
    偶这儿的Python拒绝将浮点数转成Decimal:

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

    实际上是你理解错了.
    kingwkb
        2
    kingwkb  
    OP
       2012-01-02 19:58:00 +08:00
    @xiaket 谢谢,使用浮点不会遇到问题么? python中处理金额也用浮点?
    xiaket
        3
    xiaket  
       2012-01-03 11:04:13 +08:00
    做浮点计算需要注意在进行某些计算时可能会有比较大的问题, 一个典型的(但事实上说明不了什么问题的)例子是当a比较大时, 计算sqrt(a+1) - sqrt(a)可能得到的结果不尽如人意. 这个时候如果转成计算1/(sqrt(a) + sqrt(a+1))会有更好的结果(虽然这种转换会多做一次除法计算, 计算量大了一点点).
    keakon
        4
    keakon  
       2012-01-03 20:42:01 +08:00
    Decimal可以设置精度的,金融计算时本来就要四舍五入到最小金额。你看下文档再问吧
    http://docs.python.org/library/decimal.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   938 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 22:20 · PVG 06:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.