formatC()认为0在它之后是负数';s由R中的圆(x)产生?

formatC()认为0在它之后是负数';s由R中的圆(x)产生?,r,rounding,R,Rounding,以下代码产生了令人惊讶的结果: x<-round(c(.1,-.1)) x==0 #TRUE TRUE x<0 #FALSE FALSE formatC(x) #"0", "-0" x浮点数有一个专用于数字符号的位。round()函数在舍入为0的情况下不会翻转该标志。使用浮点数时,可以有值 您可以使用sprintf查看数字字节的十六进制值表示。比如说 x <- c(.1,-.1) sprintf("%a", x) # [1] "0x1.999999999999ap-4" "

以下代码产生了令人惊讶的结果:

x<-round(c(.1,-.1))
x==0 #TRUE TRUE
x<0 #FALSE FALSE
formatC(x) #"0", "-0"

x浮点数有一个专用于数字符号的位。
round()
函数在舍入为0的情况下不会翻转该标志。使用浮点数时,可以有值

您可以使用
sprintf
查看数字字节的十六进制值表示。比如说

x <- c(.1,-.1)
sprintf("%a", x)
# [1] "0x1.999999999999ap-4"  "-0x1.999999999999ap-4"
sprintf("%a", round(x))
# [1] "0x0p+0"  "-0x0p+0"
但实际上,这只是因为您正在使用低级
formatC
函数。即使R本身在显示数字时也不区分0和-0。因为R试图隐藏这个细节,我认为你无法在R中区分两者。你必须自己编写C/C++代码来检查符号数字


有关更多非R特定的讨论,请参见:

有趣。为什么不回答这个问题呢?有什么函数可以检查你在R中知道的有符号位吗?
formatC(round(x)+0)
# [1] "0" "0"