使用浮点数完成除法运算
整数除法的问题
前面两个整数相除,结果是整数。这个值是不正确的,除非刚好是整数倍。
在饼干分给小孩时,这种除法没有问题。但是将 10 尺长的厚板均分四块,这时候就有问题了。
这时需要浮点数。
使用浮点数进行除法运算,会得到正确的结果(在精确度范围内)。
示例代码
#include <stdio.h>
int main(void)
{
printf("%d\n",10/4); // 输出 2
float plank_length = 10.0f;
float piece_count = 4.0f;
float piece_length = 0.0f;
piece_length = plank_length / piece_count;
printf("一块长%f尺的面板平均分成%f份后每块长%f尺\n",plank_length,piece_count,piece_length);
return 0;
}Code language: PHP (php)
输出结果
2
一块长10.000000尺的面板平均分成4.000000份后每块长2.500000尺Code language: CSS (css)
代码解析
| 语句 | 说明 |
|---|---|
printf("%d\n",10/4); | 两个整数相除,10/4 结果为整数 2,小数部分被截断。 |
float plank_length = 10.0f; | 声明并初始化木板总长度为 float 类型,带 f 后缀。 |
float piece_count = 4.0f; | 声明并初始化分割份数为 float 类型。 |
float piece_length = 0.0f; | 声明并初始化每块长度为 float 类型。 |
piece_length = plank_length / piece_count; | 两个浮点数相除,得到精确结果 2.5。 |
printf("...%f...", ...); | 格式说明符 %f 用于显示 float/double 类型的浮点数。 |
核心要点
- 整数除法 vs 浮点数除法:
10/4(两个整数)→ 结果为2(截断小数)。10.0f/4.0f(两个浮点数)→ 结果为2.5。
- 格式说明符必须匹配:
%d用于int类型。%f用于float和double类型(float传入时自动提升为double)。- 如果格式说明符与输出值的类型不对应(如用
%d输出float),会出现垃圾值或程序异常。
- 浮点数精度:
%f默认输出 6 位小数(10.000000)。可通过%.2f等方式指定小数位数。
建议尝试:将
printf中的%f改为%d输出浮点变量,观察错误结果,加深对类型匹配重要性的理解。