1.double
类型
Java 提供了double
处理实数(小数)的类型。它占用8 bytes
内存(是类型的两倍int
)并且可以存储范围从到的值。为了进行比较:该类型可以存储从到范围内的值。-1.7*10308
+1.7*10308
int
-2*109
+2*109
在实数中,小数部分写在小数点后。例如,123.456,或 2.5,或 100.00,或 0.01。当计算机处理这样的数字时,我们称它们为浮点数。
顺便说一下,除了类型double
,我们还有float
类型(只有 4 个字节)。它的名字来自浮点数。这个名字double
来自double float。Adouble
是 a 的两倍float
:8 bytes
与4
. 它也被称为双精度浮点数。
2.创建double
类型
双精度类型用于存储实数。要在代码中创建一个可以存储实数的变量,您需要使用如下语句:
double name;
其中name是变量的名称。例子:
陈述 | 描述 |
---|---|
|
price 创建一个真正的变量 |
|
weight 创建一个真正的变量 |
|
lightSpeed 创建一个真正的变量 |
与int
类型一样,您可以使用速记同时创建多个double
变量:
double name 1, name 2, name 3;
甚至立即为它们赋值:
double name 1 = value 1, name 2 = value 2, name 3 = value 3;
例子:
陈述 | 笔记 |
---|---|
|
变量存储5.0 |
|
变量存储2.0 |
|
3.分配整数和实数
如果整数只能分配给int
变量,而实数只能分配给double
变量,那就太糟糕了。我们希望能够在两种数字之间进行转换。而Java提供了这种能力。
首先,实数和整数都可以分配给double
变量。分配整数时,只需将它们转换为实数。当然,在此过程中可能会损失一些准确性。
陈述 | 笔记 |
---|---|
|
变量存储5.0 |
|
变量存储2.0 |
|
变量 x 存储1000000.0 |
其次,如果某个表达式中涉及整数和实数,则先将整数转换为实数,然后再与另一个实数进行运算。
陈述 | 笔记 |
---|---|
|
变量 x 存储5000.0 |
|
号码10 会显示在屏幕上 |
|
号码10.0 会显示在屏幕上 |
最后,还可以将实数分配给int
变量。当我们这样做时,实数的小数部分被丢弃——数字被向下舍入到最接近的整数。
此外,编译器要求程序员明确记录正在发生的事情(以确保其他程序员理解小数部分被丢弃)。一般来说,这样的转换在代码中看起来像这样:
integer_variable = (int)(real_number);
例子:
陈述 | 笔记 |
---|---|
|
变量x 存储5 |
|
变量x 存储5 |
|
变量x 存储11 |
4. Java 整数与实数相除
当一个整数除以一个整数时,总是舍弃余数。那我们怎么除以5
得到2
呢2.5
?
乍一看,正确的选择似乎是:
double d = 5 / 2;
但这不是那么简单。这里的问题是 Java 机器首先计算 的值5 / 2
,然后才将结果赋值给d
变量。并且5 / 2
操作是整数除法。这意味着d
将包含2
,或者更准确地说,2.0
正确的解决方法是至少把除法中涉及的一个数写成实数(即带小数点):
double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;
在每个表达式中,d
将包含2.5
但是如果我们使用变量呢?如果我们有这样的代码怎么办?:
int a = 5;
int b = 2;
double d = a / b;
这里有一个巧妙(且显而易见)的解决方案——强制 Java 机器将变量转换为实数,方法是将变量乘以一个实数 ( 1.0
)
int a = 5;
int b = 2;
double d = a * 1.0 / b;
请注意,乘法和除法具有相同的优先级,并且从左到右执行。这意味着我们在哪里乘以 1.0 很重要。
例子:
陈述 | 执行顺序 | 结果 |
---|---|---|
|
(1.0 * a) / b; |
2.5 |
|
(a * 1.0) / b; |
2.5 |
|
(a / b) * 1.0; |
2.0 |
GO TO FULL VERSION