r语言 - 读取器和write_csv:双精度数和 grisu3



有时,当我使用读取器(整洁的一部分(中的write_csv将双精度数字列保存到csv时,会发生以下情况:像285121.15这样的双精度写为285121.14999999997。原始值只有两位小数,这不是在屏幕上打印它的伪影。从数字上讲,它们几乎是同一件事,但是与这么多(不需要的小数(共享文件很烦人。write_csv的文档说使用了 grisu3 算法。 同时,我想避免自己四舍五入这些值,因为一般来说,小数位数可能会有所不同。 根据我在这里找到的

http://www.serpentine.com/blog/2011/06/29/here-成为龙-在问题中前进-你甚至不知道你曾经/

florian.loitsch.com/publications/dtoa-pldi2010.pdf?attredirects=0

这是Grisu3的一个已知缺点。 看到我现在正在处理大型数据集(因此写入磁盘不是一个大问题(,我想出了以下内容

############ to avoid troubles when saving numbers

num_to_char <-  function(df){
res <- df %>% mutate_if(is.numeric, as.character )
return(res)
}

to_csv <- function(df, ...){
df <- num_to_char(df)
write_csv(df, ...)
}

即我基本上在保存文件之前将数字转换为字符串。 我运行了一些测试,在我看来我的问题已经解决了,但是有什么注意事项我应该注意吗? 非常感谢!

我的建议是使用以下代码:

#removing unlike precision (double precision)
A <- floor(A*100)
#then converting to the real number
A <- A/100

R区的一个简单例子;(

A <-9.12234353423242
A<-A*100
A
#[1] 912.2344
A<- floor(A)
A
#[1] 912
A <- A/100
A
#[1] 9.12

最新更新