【问题标题】:Why does math.sqrt return a float to one decimal point and not just the value wo the decimal point? [closed]为什么 math.sqrt 将浮点数返回到小数点,而不仅仅是小数点后的值? [关闭]
【发布时间】:2014-09-02 21:29:45
【问题描述】:

我不确定这个问题是否已经回答(我在谷歌搜索时找不到)。 我看到http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html 数学类平方根方法返回一个双精度。我在 Eclipse 中用一些具有整数平方根的整数进行了实验 - 4、9,发现它们的平方根总是返回一个小数点后的浮点值 - 4.0、9.0。我很好奇为什么它甚至返回那个额外的小数?我认为整数也可以被视为双值。对我来说,只返回 1 更有意义,因为您可以节省更多内存(我想需要更多内存来存储额外的小数点)我什至测试了它

public static double control(){
    return 1;
}

发现只返回 1 是有效的。

【问题讨论】:

  • 不,整数不能被视为与双精度数相同。 (int)4 和 (double)4 具有完全不同的内部值。并且大多数整数也不能完全表示为浮点数。 (float)4 实际上是 3.9999999999xxxxxx
  • 基本上有近乎无限的浮点数,只有很小的一个子集有精确的翻译。存储该异常列表并且每次都必须检查它以查看您的值是否是“从不精确”规则的例外是零点
  • sqrt 函数返回一个double 值(出于自然原因,我相信您理解)。该值通常以 8 个字节表示,采用浮点格式(由标准指定)。它没有您看到的十进制数字。当您将其打印到屏幕上时(例如使用printf),您可以指定要打印小数点后的位数。如果这是您想要的,您也可以将其转换为整数(正如您提到的 sqrt(4)sqrt(9) - 那是您可能想要执行此转换的时候)。
  • 继续我之前的评论:但double 值本身只是由 64 位数据组成,处理器的 FPU(浮点单元)可以在其上应用任何支持的算术运算(除法,乘法等)。正如您所指的那样,它没有“十进制数字”。根据标准,double的“结构”见en.wikipedia.org/wiki/Double-precision_floating-point_format
  • 根据您的问题和 cmets 判断。我认为您应该阅读更多关于数字如何在内部存储以及整数和十进制数的二进制表示的内容。

标签: java double square-root


【解决方案1】:

[I] 发现 [Math.sqrt(x) where x is a perfect square] 总是返回一个小数点后的浮点值。

您将双精度值的特定打印表示误认为是该值本身。双精度数没有小数点。 double 是表示特定实数(例如 4)的位模式。

小数点仅出现在实数的特定小数表示中。如果我写“0.25”,那显然有小数点。如果我写“1/4”,就没有小数点。但这只是同一个实数的两种不同表示。表示 Java 表达式返回的双精度值的特定位模式 1.0/4.0 也是如此。

我不知道为什么 Double.toString(4) 返回字符串“4.0”而不是返回“4”,但我猜有人想让它与 Java 语言中的数字文字一致。当您的程序中出现“4”时,这是一个 int 文字,而当您的程序中出现“4.0”时,这是一个双文字。

【讨论】:

    【解决方案2】:

    该方法返回一个双精度值。由于方法设置的返回类型,它将显示为双精度。在stackoverflow上有一个解决方案,如果它是4.0则返回in,如果不是则显示double。 Solution on stackoverflow

    【讨论】:

    • 这并不是他真正要问的。我认为对数据类型及其存储缺乏了解。
    猜你喜欢
    • 2016-06-22
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2021-10-09
    • 2014-04-06
    • 2023-01-31
    相关资源
    最近更新 更多