关于python format的用法
本帖最后由 晴天团团团 于 2020-9-28 20:03 编辑(1)
>>> c='{:.6}'.format(27.888,'GB')
>>> c
'27.888'
>>> d='{:.8}'.format(27.888,'GB')
>>> d
'27.888'
>>> c==d
True
为什么c==d?
(2)
>>> a= '{:.88}'.format(27.888,'GB')
>>> a
'27.888000000000001676880856393836438655853271484375'
>>> b= '{:.888}'.format(27.888,'GB')
>>> b
'27.888000000000001676880856393836438655853271484375'
>>> a==b
True
为什么a==b?为什么a,b保留这么几十位小数?
(3)
>>> '{:.888}'.format('27.888''GB')
'27.888GB'
为什么是这样的结果?
(4)
>>> '{:.1}'.format(27.888,'GB')
'3e+01'
>>> '{:.2}'.format(27.888,'GB')
'2.8e+01'
>>> '{:.3}'.format(27.888,'GB')
'27.9'
为什么是这样的结果?
.x x是多少就保留多少位 27.888000000000001676880856393836438655853271484375和27.888是同一个数 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号。 kylin121380 发表于 2020-9-28 20:16
.x x是多少就保留多少位
那为什么会这样呢?
>>> d='{:.8}'.format(27.888,'GB')
>>> d
'27.888' kogawananari 发表于 2020-9-28 20:44
Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储 ...
可是27.888000000000001676880856393836438655853271484375不是52位有效数字啊? 晴天团团团 发表于 2020-9-28 20:52
那为什么会这样呢?
>>> d='{:.8}'.format(27.888,'GB')
python默认提供17位小数精度,后面的就没有意义,27.888保留8位就是27.888,你保留888位之后的数字没有意义 本帖最后由 sunrise085 于 2020-10-23 16:46 编辑
感觉好无语哟。自己给自己挖坑,然后还出不来了。。。
你的这些例子中,第三个最简单,最后再说,先说另外三个
在这几个例子中,前面只有一个填位符,而后面俩参数,所以第二个参数 'GB' 根本没用。
前面的填位符中都没有写 f ,所以不把后面的内容当成浮点数,仅仅是当成字符串,点后面的数字就是字符串的长度,但也不是把你所写的这个数字27.888当成字符串,而是把这个原数当成字符串。
第一个和第二个例子,之所以相等,是因为他们就是字符串啊,字符串每个字符一致,那么两个字符串就相等呗
先说第二个例子中,a和b为什么是这么多位。
27.888在python中是多少呢?
可以通过下面这个看看
>>> import decimal
>>> decimal.Decimal(27.888)
Decimal('27.888000000000001676880856393836438655853271484375')
>>> 我们可以看出,他就是你所得到的那个a字符串中的内容。也就是说不管你写88还是888,他只有50位有效数字,因为原数内容就这么多
再说第一个例子,一个写的是6,一个写的是8,但是最后出来的都是五位有效数字 '27.888'。看上面得到的那个27.888的原数,前面几位有数字,从第七位开始为0,一直到第16位都为0,第17位小于5,所以这里你写5~16位得到的结果都一样,都是'27.888'
上面的明白了之后,第四个例子,就好讲了
第四个例子中,前两条,一位或两位有效数字,因为整数部分有两位,就只能写成这种科学计数法了。第三条,三位有效数字,就直接四舍五入了
最后说一下第三个例子。前面也是一个占位符,后面的参数是 '27.888''GB' 这个中间没有逗号,所以这是一个拼接字符串,是一个参数,相当于 '27.888GB'。因为后面的参数就是个字符串,那就简单了前面要几位,就给几个字符,但最多只有八个字符
sunrise085 发表于 2020-9-28 21:58
感觉好无语哟。自己给自己挖坑,然后还出不来了。。。
你的这些例子中,第三个最简单,最后再说,先说另 ...
也就是说,(1)中,因为无论保留六位还是八位,27.888后面都是0,所以不显示0?
(2)中,有效数字只有50位,所以至多显示50位?
(3)中,因为它是一个字符串,所以当.x的x大于字符串本身的长度,就只显示字符串本身的长度?
(4)中,当.x的x大于数字整数部分的长度,就不用科学计数法? kylin121380 发表于 2020-9-28 21:35
python默认提供17位小数精度,后面的就没有意义,27.888保留8位就是27.888,你保留888位之后的数字没有意 ...
那为什么保留八位小数不是27.88800000?
页:
[1]