Java 转换为 Double

标签 java java-8 java-7

   class Rextester
{  
    public static void main(String args[])
    {
        double b = 1.13f * 100;
        System.out.println(b);
    }
}

在上述代码中,当 f 未附加到 1.13 时,输出为 112.99999999999999,但当 f 附加到 1.13 时,输出值为 113。为什么会出现这种情况?

最佳答案

f 后缀告诉 Java 该数字是单精度 float ,而不是 double float 。

float 的一般问题是某些数字无法精确表示。内部表示的尾数的每一位代表分母中2的幂的分数,即1/2、1/4、1/8、1/16等。然后计算机将选择最接近的数字来表示你想要的号码。

在您的情况下发生的情况是,当您省略 f 时,它会使用完整的 double 位,并获取最接近的数字(112.9999999999)。当您执行 f 时,您是在告诉程序将其四舍五入到最接近的单精度 float ,因此不适合的前 9 个将被四舍五入并传播到值 113。

这个具体数字有点巧合。不要假设使用单精度浮点总是会给出预期结果。浮点运算在计算中总是有点困惑。

关于Java 转换为 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51259866/

相关文章:

java - 带有 vector 和 clear() 的 ConcurrentModificationException

java - 在Java中找不到indexOf符号

尽管使用 Scanner 类输入数据,但 String 返回 Null 值的 Java 问题

java - 如何使用 Streams 将一种类型的列表转换为另一种类型的列表?

android-studio - 支持 Java 1.7 的 Android Studio 预览版对我来说已损坏

java - Eclipselink 未检测到脏实体

Java8 - 如何知道夏令时现在是否开启

java - 替代 Java 8 中的 MoreObjects

java - "generified"版本的JTree(TreeModel,TreeNode,...)会在JDK7中吗?

java - ThreadPoolExecutor 忽略错误 (OutOfMemoryError)