2014-10-27 52 views
1

上漂浮状态什么规则规定Python如何浮动四舍五入?

0.1

0.1000000000000000055511151231257827021181583404541015625

也就是说更多的数字比大多数人觉得有用,所以Python保持 位数管理通过显示一个圆形的值,而不是

Python文档

0.1

围绕哪些花车四舍五入展示哪些规则,哪些不规范?我遇到一些有趣的场景中

1.1 + 2.2返回3.3000000000000003(未四舍五入)

1.0 + 2.3回报3.3(四舍五入)

我知道小数模块存在使这些事情是一致的,但是对于什么决定了浮游物中显示的四舍五入感到好奇。

+4

规则会根据您使用的Python版本而变化。看例如http://stackoverflow.com/questions/25898733/why-does-strfloat-return-more-digits-in-python-3-than-python-2 – 2014-10-27 16:57:34

+0

@MarkRansom考虑到那里有一个特别好的答案,我不知道是否认为这个问题是重复的,或者试图做出更加实际的回答。 – 2014-10-27 17:06:47

+1

@PascalCuoq我得到了这样一个唠叨的感觉,那里的答案并不完整。它当然不是一种易于消化的格式。 – 2014-10-27 17:12:10

回答

3

什么是围绕哪些花车四舍五入显示 哪些规则没有?我遇到一些有趣的场景中

1.1 + 2.2返回3.3000000000000003(未四舍五入)

1.0 + 2.3回报3.3(四舍五入)

部分的解释当然是1.1 + 2.2和1.0 + 2.3产生不同的浮点数,并且的部分解释是是1.1不是真的11/10,2.2不是真的22/10,当然浮点数+也不是RA也可以添加。

许多现代编程语言,包括最近的Python的变化,显示一个双精度浮点值d时,显示必要的十进制表示,重新分析double的十进制数字准确数量,再次转换为d。因此:

  1. 只有一个浮点值打印为3.3。不能有两个,因为它们必须通过定义的应用是相同的,并且至少有一个,因为如果将十进制表示3.3转换为double,则会得到一个double,它具有生成字符串“ 3.3“转换为十进制时所用的算法。

  2. 这些值为了显示十进制数字而四舍五入,但它们保持原来的数字。因此,您所要求的一些“规则”是关于如何对浮点运算进行舍入的规则。这很简单,但你必须look at the binary representation of the arguments and results,它很简单。如果您查看小数表示,舍入看起来是随机的(但它不是)。

  3. 这些数字在二进制中只有一个紧凑的表示形式。确切的值可能需要很多十进制数字来表示。 “3.3000000000000003”不是“未被占用”,它只是四舍五入到比“3.3”更多的数字,具体地说,恰好是将该双精度数字与其邻居区分开所需的位数(由“3.3” )。它们分别是,其实下面的数字:

 
3.29999999999999982236431605997495353221893310546875 
3.300000000000000266453525910037569701671600341796875 

在这两个,33/10是与其最接近的,所以前者可打印为“3.3”。后者不能打印为“3.3”,也不能打印为“3.30”,“3.300”,...,“3.300000000000000”,因为所有这些表示都是等效的,并且回到浮点数3.29999999999999982236431605997499353221893310546875。所以必须打印为“3.3000000000000003”,其中3是因为数字2后面是6而获得的。