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

为什么显式类型转换需要从double到float,而不是从int到byte?

尹钱青
2023-03-14
float fl = 5.5;    //compilation error
float fl = (float) 5.5;   //works fine

共有1个答案

顾淳
2023-03-14

在整数版本中,编译器知道数字5中的所有数据都可以存储在字节中。没有信息丢失。对于浮点值并不总是如此。例如,0.1f不等于0.1d

现在,对于您给出的示例,十进制值5.5在floatdouble中都准确地表示,因此您可以辩称,在这种情况下,不会丢失任何信息--但语言规范必须使其有效,这将是非常奇怪的:

float f = 5.5;

但这是无效的:

float f = 5.6;
 类似资料:
  • 我想将浮点值转换为int值或抛出异常,如果这种转换是不准确的。 我找到了以下建议:使用来转换,然后使用来检查这些值是否相等。如果它们相等,那么转换是精确的,否则就不是。 但是我发现了一个不起作用的例子。下面是演示这个例子的代码: 它输出: 我知道2147483648不适合整数范围,但我很惊讶为这些值返回true。有没有更好的方法来比较float和int?我想可以将这两个值都转换为字符串,但对于这样

  • 问题内容: 在日食中显示错误。这是总和是122字节范围内的范围。所以为什么我在这里出现此错误。 提前致谢… 问题答案: 当您对字节执行数学运算时,Java会对字节进行扩展(自动类型提升)到字节(隐式转换)以对这种情况进行整数处理。所以当你表演 由于t1 + t2的结果比字节宽,因此您需要将其下转换为字节。 消除编译错误。 有关更多信息,请阅读 JLS 5.1.2

  • 问题内容: 我正在尝试制作一个采用字符串公式的方法,并通过以很小的间隔进行一次黎曼求和来解决该公式的积分问题。我正在使用ScriptEngine和ScriptEngineManager类评估函数(使用eval()方法)。由于某种原因,我收到此错误: 线程“主”中的异常java.lang.ClassCastException:无法将位于sum.main(sum.java:13)处sum.integr

  • 问题内容: 我可以隐式地将int转换为long,并将long转换为Long。为什么无法将int隐式转换为Long?为什么Java不能在示例的最后一行进行隐式转换? 问题答案: 和是对象。装箱/拆箱仅适用于原语。做的就像,那不是不!另外,请记住,之间没有继承,所以甚至无效

  • 我为JavaFX TableColumn创建了一个扩展函数,使得在没有重复样板的情况下实现cellFactory更加简洁。扩展函数定义如下: 为了格式化TableCell,我只需要定义TableCell中应该发生什么。当当前单元格有非空项可用时更新项。例如,要格式化LocalDateTime,我现在可以编写: 然后我继续定义另一个扩展来执行此操作,因此我可以编写: 此函数使用第一个函数,如下所示: