学习中遇到的一些问题记个笔记。
- Python
- round函数
- 关于round函数,常见的bug是
round(2.675,2)
返回结果2.67而不预料的2.68。这个很多人都解释过了,是因为浮点数机器存储时本身存在失真,2.675存储的值是2.674999999……。 - 今天发现一个可能有关的bug。我从网页上抓了一组数据转存成DataFrame,这时DataFrame中的数值还是字符串格式,所以接着用
str=str.astype('float64')
将字符串转为浮点数。后面做运算时对两组数据做了乘法,str3=map(lambda x,y: round(x*y, 2), str_f1, str_f2)
,这里str_f1和str_f2分别是格式转为浮点数后的两个列,使用lambda函数时顺便用round函数取了两位小数。然后bug出现了。得到的结果里,既有121.16
这样符合预期的格式,也有50.829999999999998, 164.08000000000001
这样的古怪结果。更诡异的是这些不符合预期的数再怎么round(a, n)
转化也没用。为什么会出现后面这类数,应该是str1字符串转为float64格式的数值时出现的失真,但是为什么round(a, n)
函数会失效,无法精确到想要的小数位数,想不明白。
- 关于round函数,常见的bug是
- round函数