1

我希望能够找到一种可靠的方法来计算传递给 Erlang 函数的浮点值的小数点后的有效位数。假设所需函数的名称是counter,它的行为应该是这样的:

counter(3.14) => 2
counter(3.00001) => 5
counter(3.10000) => 1

谢谢大家。


更新:由于浮点数表示的性质,这个问题极不可能解决。

4

2 回答 2

2

绝对没有可靠的方法来做到这一点。浮点数是基数为 2 的数字。你在问一个关于它们的有限长度 base-10 表示的问题。对于大多数小数,不存在精确的以 2 为底的浮点表示。我们可以进行猜测,就像系统将它们格式化为字符串或输出时所做的那样。但可以证明,它们中没有一个总是正确的。

于 2013-10-09T23:37:38.800 回答
1

伪代码,

  • 转换为所需的字符串表示。
  • 检查小数点?不存在,返回 0
  • 将最右边的零修剪到小数点的右边。
  • 计算小数点右侧的剩余字符
于 2013-10-09T23:45:08.717 回答