拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 将两个整数除以浮点数

将两个整数除以浮点数

白鹭 - 2022-09-08 2145 0 2

一、概述

在Java 中,我们可以使用除法运算符(/) 将左侧的值除以右侧的值。例如,int number = 10 / 5

在这个快速教程中,我们将探讨如何从整数除法运算中获得float结果。

2. 问题介绍

首先,为简单起见,我们将在本教程中使用单元测试断言来验证计算结果。

我们可能已经意识到,当我们将除法运算符应用于像a/b 这样的两个整数时,它总是返回一个整数,即使a 不能被**b ,**** a/b a**例如:

int i = 10 / 4;
 assertEquals(2, i);

如果我们运行测试,它就会通过。因此,10 / 4产生2 而不是2.5而且,即使我们将计算结果赋给一个float型变量,结果仍然是两个:

float x = 10 / 4;
 assertEquals(2, x);

那么接下来,让我们先了解一下为什么会出现这种情况,然后再弄清楚如何得到想要的float结果,例如本例中的2.5。

3. 为什么Java中两个整数相除总是一个整数?

要了解为什么Java 中10 / 4 = 2,我们需要查看JLS(Java 语言规范)中的除法运算符部分,以了解除法运算符的行为是如何定义的。

首先,规范规定整数除法向零舍入。换句话说,两个整数的除法运算的结果只是商值。其余不包括在内。

因此,当我们计算10 / 4时,我们得到2 而不是2.5。

接下来,让我们看看如果两个整数不可整除,如何得到预期的float结果。

4. 如何使两个整数相除产生浮点数?

现在,我们已经了解了除法运算符如何处理两个整数。JLS 还在二进制数字提升中定义了原始操作数转换规则。

*/%运算符执行二进制数字提升因此,除法运算遵循操作数转换规则。

那么接下来,让我们仔细看看操作数转换规则。

根据JLS,当我们计算a/b时:

  • 如果任一操作数是double,则另一个操作数将转换为double.

  • 否则,如果任一操作数的类型为float,则另一个将转换为float.

  • 否则,如果任一操作数是long,则另一个将转换为long.

  • 否则,两个操作数都转换为int.

根据上面的规则,如果我们想让a/b操作的结果是一个float,至少有一个操作数应该是float.

那么,接下来,让我们看看当我们将一个操作数转换为float时,是否能得到预期的结果:

float x = (float) 10 / 4;
 assertEquals(2.5, x);
 float y = 10 / (float) 8;
 assertEquals(1.25, y);

如果我们试一试,上面的测试就通过了。因此,将任何操作数转换为float会使除法产生float结果



标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *