关于小数的问题

2012-01-02 19:47:21 +08:00
 kingwkb
>>> a = 0.1
>>> b = decimal.Decimal(0.1)
>>> a
0.1
>>> b
Decimal('0.1000000000000000055511151231257827021181583404541015625')


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

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

实际上是你理解错了.
kingwkb
2012-01-02 19:58:00 +08:00
@xiaket 谢谢,使用浮点不会遇到问题么? python中处理金额也用浮点?
xiaket
2012-01-03 11:04:13 +08:00
做浮点计算需要注意在进行某些计算时可能会有比较大的问题, 一个典型的(但事实上说明不了什么问题的)例子是当a比较大时, 计算sqrt(a+1) - sqrt(a)可能得到的结果不尽如人意. 这个时候如果转成计算1/(sqrt(a) + sqrt(a+1))会有更好的结果(虽然这种转换会多做一次除法计算, 计算量大了一点点).
keakon
2012-01-03 20:42:01 +08:00
Decimal可以设置精度的,金融计算时本来就要四舍五入到最小金额。你看下文档再问吧
http://docs.python.org/library/decimal.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/24860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX