使用read_excel读取Excel后值变为1.1000000000000001而非1.1的原因
为什么读取Excel时1.1会显示为1.1000000000000001?
这是典型的二进制浮点数精度限制导致的问题,具体原因如下:
- 十进制小数1.1无法被二进制浮点数精确表示:计算机存储数值时使用二进制,而1.1转换成二进制是无限循环的小数,只能用有限位二进制近似存储,这个近似值转回十进制后就会变成1.1000000000000001。
- Excel的格式化隐藏了真实值:Excel默认会对浮点数做显示格式化,把这个近似值展示成看起来“精确”的1.1,但单元格底层存储的其实是那个近似值。
read_excel读取的是底层真实值:readxl包的read_excel函数会直接读取Excel单元格存储的原始数值,不会像Excel那样做格式化处理,所以会把真实的近似值展示出来。
如果需要让数值显示为1.1,可以用round()函数调整精度,比如:
my.df$target_column <- round(my.df$target_column, 1)
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

