1.double类型

Java 提供了double处理实数(小数)的类型。它占用8 bytes内存(是类型的两倍int)并且可以存储范围从到的值。为了进行比较:该类型可以存储从到范围内的值。-1.7*10308+1.7*10308int-2*109+2*109

在实数中,小数部分写在小数点后。例如,123.456,或 2.5,或 100.00,或 0.01。当计算机处理这样的数字时,我们称它们为浮点数

顺便说一下,除了类型double,我们还有float类型(只有 4 个字节)。它的名字来自浮点数。这个名字double来自double float。Adouble是 a 的两倍float8 bytes4. 它也被称为双精度浮点数


2.创建double类型

双精度类型用于存储实数。要在代码中创建一个可以存储实数的变量,您需要使用如下语句:

double name;
创建double类型

其中name是变量的名称。例子:

陈述 描述
double price;
price创建一个真正的变量
double weight;
weight创建一个真正的变量
double lightSpeed;
lightSpeed创建一个真正的变量

int类型一样,您可以使用速记同时创建多个double变量:

double name 1, name 2, name 3;
创建多个double变量

甚至立即为它们赋值:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
创建和初始化多个double变量

例子:

陈述 笔记
double price = 5.0;
变量存储5.0
double weight = 2;
变量存储2.0
double x = 1.0, y = 2.0, z = 3.0;

3.分配整数和实数

如果整数只能分配给int变量,而实数只能分配给double变量,那就太糟糕了。我们希望能够在两种数字之间进行转换。而Java提供了这种能力。

首先,实数和整数都可以分配给double变量。分配整数时,只需将它们转换为实数。当然,在此过程中可能会损失一些准确性。

陈述 笔记
double price = 5.0;
变量存储5.0
double weight = 2;
变量存储2.0
int t = 1000;
double x =  t * t;

变量x存储1000000.0

其次,如果某个表达式中涉及整数和实数,则先将整数转换为实数,然后再与另一个实数进行运算。

陈述 笔记
int t = 1000;
double x = t * 5.0;

变量x存储5000.0
System.out.println(5 * 2);
号码10会显示在屏幕上
System.out.println(5 * 2.0);
号码10.0会显示在屏幕上

最后,还可以将实数分配给int变量。当我们这样做时,实数的小数部分被丢弃——数字被向下舍入到最接近的整数。

此外,编译器要求程序员明确记录正在发生的事情(以确保其他程序员理解小数部分被丢弃)。一般来说,这样的转换在代码中看起来像这样:

integer_variable = (int)(real_number);
将实数分配给int变量

例子:

陈述 笔记
int x = (int)(5.5);
变量x存储5
double a = 5.999;
int x = (int)(a);
变量x存储5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
变量x存储11


4. Java 整数与实数相除

当一个整数除以一个整数时,总是舍弃余数。那我们怎么除以5得到22.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 很重要。

例子:

陈述 执行顺序 结果
int a = 5;
int b = 2;
double d = 1.0 * a / b;
(1.0 * a) / b; 2.5
int a = 5;
int b = 2;
double d = a * 1.0 / b;
(a * 1.0) / b; 2.5
int a = 5;
int b = 2;
double d = a / b * 1.0;
(a / b) * 1.0; 2.0