【问题标题】:Count how long the floating point is计算浮点数有多长
【发布时间】:2016-09-20 03:36:26
【问题描述】:

如何计算浮点数的长度?

例如

count(10.123); //result: 3
count(10); //result: 0
count(10.3771) //result: 4

我知道转换成字符串的时候怎么数,但是效率不是很高,是吗?

【问题讨论】:

  • 需要转换成字符串。在浮点数上计数数字是没有意义的。它仅表示具有字符串表示的某些东西(并且仅适用于特定的基数)
  • 将其转换为字符串绝对是最简单的方法,而且我会向甜甜圈下注,因为您不会创建价值数十万美元的重要的、性能关键的应用程序。
  • 三分之一 (1/3) 的十进制表示形式有多长?
  • 转换为字符串是最有效的方法。
  • 您希望count(10.000) 会返回什么?

标签: java double


【解决方案1】:

double 始终是特定长度。它只会显示需要获得准确性的数字。

即。 10.3771 相当于 00000010.37710000(不是真正存在的 0 的确切数量,我只是想解释这个概念)。

实际上,即使这是不准确的,因为 double 是一个 64 位二进制数

将其转换为String 是您最好的选择,而不是一种低效的方法。

【讨论】:

  • 嗯,实际上 10.3771 存储为 10.3771000000000004348521542851813137531280517578125,这是最接近 10.3771 的双精度数。
  • @DavidWallace,真的吗?这个数字有五十多位,但一个双精度数甚至不能代表二十位精度。此外,这些是十进制数字,但 java double 始终是 IEEE binary 浮点数。
  • @jameslarge 是的,真的。给定任何数字,您可以将其写成二进制或十进制;所以真的没有“十进制数”或“二进制数”这样的东西。 java double 有 64 位,正好可以存储这个特定的数字。
  • 不,了解“它的实际存储方式”对某人来说真的很好,这样他们就可以适当地使用floatdoubleBigDecimal。如果我用一系列 0 和 1 来写这个数字,就不清楚它正好是 10.3771。
  • 我同意理解浮点数很棒。我的不同意在于,通过将一个大的十进制数声明为“真实值”,它忽略了底层表示是二进制的事实(这 浮点数不“精确”的原因之一) 并且还意味着高精度(不存在)。 1 和 0 可能会令人困惑,但太糟糕了,因为这是事实。
猜你喜欢
  • 1970-01-01
  • 2012-03-10
  • 2015-10-07
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多