#t207. 计算分数的浮点数值
计算分数的浮点数值
计算分数的浮点数值
题目背景
Special for beginners, ^_^
题目描述
两个整数和分别作为分子和分母,既分数,求它的浮点数值(双精度浮点数,保留小数点后 9 位)
输入格式
输入仅一行,包括两个整数和(不为 0)
输出格式
输出也仅一行,分数的浮点数值(双精度浮点数,保留小数点后 9 位)
样例输入
5 7
样例输出
0.714285714
数据范围
1s, 1024KiB for each test case.
提示
一、把整数变成小数:两种写法
int a = 7, b = 2;
double r1 = (double)a / b; // 3.5
double r2 = a * 1.0 / b; // 3.5
double r3 = (double)(a / b); // 3.0 ← 错的
(double)a / b:先把 a 转成小数,再除以 b,整个除法按小数算;a * 1.0 / b:乘以 1.0 让表达式变成 double,效果一样;(double)(a / b):先做整数除法得到 3,再转成 3.0,小数部分早在除法时就丢了。
二、关键在「什么时候转」
转换必须发生在除法之前。括号的位置决定一切:
(double)a / b // 先转 a,再除 → 3.5
(double)(a / b) // 先除,再转 → 3.0
三、1.0 是个好习惯
a * 1.0 / b 不需要记类型转换的写法,只要乘一个 1.0,后面整个表达式就变成小数运算。
四、常见错误
-
(double)(a / b)括号套错位置; -
用
1/2期望 0.5(两个 int 相除是 0); -
转换后仍用
%d输出。 -
a / b两个都是 int,会走整除。先想办法让其中一个变成 double。 -
转完之后再做除法,结果就是小数。
-
输出保留 9 位小数。
自查:用
5 7验证,前几位应当是0.714285714;如果输出0.000000000,说明除法仍然是整除。