【问题标题】:calculate how many digits that agree after decimal point of two numbers in R计算R中两个数字的小数点后有多少位一致
【发布时间】:2018-08-20 20:58:09
【问题描述】:

我希望 R 计算两个数字之间相同的位数,并返回小数点后相同的位数。例如:

a <- 0.1234567890
b <- 0.1234567891

输出:

9

9 位相同。

谢谢!

【问题讨论】:

  • 转换为character字符串然后使用string distance
  • 你确定这是一个非常有用的措施吗?毕竟R中的0.1 + 0.2不等于0.3。你是想显示两个数字有多相似吗?

标签: r compare decimal


【解决方案1】:

floor(-log10(abs(a-b)))怎么样?

请注意,任何这样的计算总是存在浮点错误问题的风险 - 请参阅下面 John Paul 指出的示例。

【讨论】:

  • 非常快速和优雅的答案。太完美了!
  • 真令人印象深刻!
  • ceiling(-log10(abs(.3112-.3111))-1) 给出 4。对吗?我认为应该是 3。
  • 我怀疑任何像这样的公式总是会遇到一些浮点比较问题。上面添加了警告 - 感谢您指出!
【解决方案2】:

这是另一个(基于字符串的)答案,它不应该遇到任何浮点比较问题...

sum(sapply(1:20,function(i) grepl(substr(b,1,i),a)))-2

比较b的所有初始子串(强制为字符)长度为1到20(你可以扩展它),确定它们是否包含在a中,返回匹配的数量(即长度a 中包含的 b 的最长子字符串)并减去 2 以允许初始 0.

【讨论】:

  • 不错的一个!这对于比较末尾没有 -2 的单词和句子也很有用。
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 2019-07-21
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多