阡陌 发表于 2024-3-15 02:15:04

float(单精度浮点型)


**float(单精度浮点型)**

[数据类型]



## 描述

浮点数数据类型,即带有小数点的数字。浮点数通常用于表达模拟和连续值,因为它们比整数具有更高的分辨率。浮点数的范围可以大到 3.4028235E+38,也可以小到 -3.4028235E+38。它们以 32 位(4 字节)的信息形式存储。



## 语法

```cpp
float var = val;
```

**参数:**
var: 变量名。
val: 要分配给该变量的值。



## 示例代码

```cpp
float myfloat;
float sensorCalbrate = 1.117;

int x;
int y;
float z;

x = 1;
y = x / 2; // y现在等于0,因为整数不能存储小数部分
z = (float)x / 2.0; // z现在等于0.5(必须使用2.0,而不是2)【注:实际上可以是2,因为x已经被强制转换为浮点数】
```



## 注意事项和警告

如果使用浮点数进行数学运算,需要添加小数点,否则它将被视为整数。有关详细信息,请参阅[浮点型常量](https://www.mculoop.com/thread-222-1-1.html)页面。

浮点数数据类型只有 6 - 7 位小数的精度。这是指总位数,而不是小数点右侧的位数。与其他平台不同,在这些平台上,您可以通过使用 double 来获得更高的精度(可达 15 位数字),但在 Arduino 上(这里指 8 微处理器平台,如 UNO),double 的大小与 float 相同。

浮点数并不精确,进行比较时可能会产生奇怪的结果。例如,9.0 / 0.3 可能并不完全等于 30.0。相反,您应该检查两个数字之间的差的绝对值是否小于某个小数字。

从浮点数转换为整数数学运算时会导致截断:

```c
float x = 2.9; // 一个浮点类型变量
int y = x; // 结果是2,因为小数部分被截断了
```

如果相反,您想在转换过程中进行四舍五入,则需要添加 0.5:

```c
float x = 2.9;
int y = x + 0.5; // 结果是3,因为进行了四舍五入
```

或者使用 `round()` 函数:

```c
float x = 2.9;
int y = round(x); // 结果是3
```

浮点数学运算在执行计算时比整数数学运算慢得多,因此应该避免使用,例如,当循环必须以最快速度运行以执行一个对时间有严格要求的功能时。程序员通常会费尽心思将浮点计算转换为整数数学运算以提高速度。



## 扩展阅读

- (https://www.mculoop.com/thread-209-1-1.html)




页: [1]
查看完整版本: float(单精度浮点型)