提问人:Davide 提问时间:11/19/2021 最后编辑:Davide 更新时间:11/22/2021 访问量:64
当字符串转换为数值时,带有 numeric 的 as.character() 会失去精度
as.character() with numeric loses precision when a string is transformed into numeric
问:
在 R 中,我想运行以下代码:
str <- "2811.1019192874087"
val <- as.numeric(str)
str2 <- as.character(val)
print(str2)
print(val)
它打印:
"2811.10191928741"
2811.102
但我想要:
"2811.1019192874087"
2811.102
简而言之,我希望 as.character() 的精度不会丢失。我已经尝试使用where是我选择的数字,但这只会改变输出,而不会改变值本身。我也尝试使用.这个系统似乎可以工作,但不幸的是,输出是类型而不是类型。options(digits = x)
x
trimws(format(round(x, k), nsmall=k))
character
numeric
如果我在 Java 中做同样的事情,它就可以正常工作。我运行以下代码:
String str = "2811.1019192874087";
double val = Double.parseDouble(str);
String str2 = String.valueOf(val);
System.out.println(str2);
System.out.println(val);
它打印:
2811.1019192874087
2811.1019192874087
如何在 R 中解决问题?非常感谢
答: 暂无答案
上一个:近似值从双精度到单精度的转换
评论
as.numeric
print
sprintf("%4.13f", val)
[1] "2811.1019192874087"
as.numeric()
print(val, digits=15)
显示更多数字(我不明白这一点:“options(digits = ...只更改打印值,而不更改值本身“),因为使用更多数字会显示 R 在打印时默认截断为 7 的值)str2 <- sprintf(paste0("%", paste0(unlist(lapply(strsplit(str, "\\."), nchar)), collapse = "."), "f"), val)