当前位置: 首页 > 知识库问答 >
问题:

为什么双参数化函数接受浮点,反之亦然?

孙熠彤
2023-03-14

我今天遇到了一些奇怪的事情。下面的代码编译意外,运行正常。

public class Test {

    public static void func(double d) {
        System.out.print("d : " + d);
    }

    public static void main(String[] args) {
        float f = 10.0f;
        func(f); // output: d : 10.0
    }
}

但这一条给出了编译错误

public class Test {

    public static void func(float f) {
        System.out.print("f : " + f);
    }

    public static void main(String[] args) {
        double d = 10.0d;
        func(d);
    }
}

有人能解释一下这种行为吗?

共有2个答案

漆雕稳
2023-03-14

双(8字节)是比浮点(4字节)更大的数据类型,因此可以在双(8字节)中存储浮点(4字节),但不能在浮点(4字节)中存储。如果您尝试这样做,您将得到可能的精度损失。

因此,下面将给出错误。

float f = 120.55;

而这个没有

double d = 120.44f;
鞠边浩
2023-03-14

从〈code〉浮点〈code〉到〈code〉双〈code〉的类型提升是安全的,因为没有数据丢失,所有〈code〉浮点〈code〉4个字节都可以放入〈code〉双〈code〉8个字节。

然而,相反,从双精度到浮点,总是截断数据,因为双精度8字节不能放入浮点4字节。编译器通过强制程序员手动指定类型转换来防止意外执行这种截断。

 类似资料:
  • 下面的代码通过一些位黑客执行快速平方根倒数运算。该算法可能是由硅图形在20世纪90年代初开发的,它也出现在了《雷神之锤3》中。更多信息 然而,我从GCC C编译器那里得到以下警告:取消引用类型双关指针将违反严格的别名规则 在这种情况下,我应该使用,还是?

  • 问题内容: 我正在尝试将a 转换为原始类型,反之亦然: 奇怪的是,当我尝试将新分配的分配回a时,结果不过是垃圾。 但是,当我使用原始数据类型作为参数时,似乎相同的算法工作得很好。 问题答案: 改用这些。

  • 我的脚本将,作为参数: 但当我将它作为分隔符传递时,它是空的 我知道在参数/参数解析中很特殊,但我以和引用的形式使用它。 为什么它不起作用?我使用的是Python 3.7.3 这是测试代码: 当我运行它作为它打印空。

  • 我一直在搜索任何链接、文档或文章,以帮助我了解我们何时选择数据集而不是数据框,反之亦然? 我在互联网上找到的所有标题都是,但当打开时,它们只指定了数据帧和数据集之间的区别。这里有很多链接,只是列出了场景名称的不同。 stackoverflow上只有一个问题有正确的标题,但即使在这个答案中,databricks文档链接也不起作用。 我正在寻找一些信息,这些信息可以帮助我从根本上了解我们何时使用数据集

  • 据我所知,Closeable接口大约是从Java1.5开始的,而AutoCloseable是在Java1.7中引入的。 我想理解的是为什么Closeable扩展了AutoCloseable而不是相反?这样做是不是因为向后依赖(不能更改可关闭接口),即AutoCloseable需要比Closeable有更广泛的例外?还是我的逻辑错了,事情应该是这样的?

  • 问题内容: 我一直在想是否可以在PHP中将函数作为参数传递;我想要类似的东西,当您在JS中编程时: 我想要的是在exampleMethod中的某处执行该功能。这在PHP中可行吗? 问题答案: 如果您使用的是PHP 5.3.0或更高版本,则是可能的。 请参见手册中的匿名函数。 对于您的情况,您将这样定义: