#t207. 计算分数的浮点数值

计算分数的浮点数值

计算分数的浮点数值

题目背景

Special for beginners, ^_^

题目描述

两个整数 a \,a\,和 b \,b\,分别作为分子和分母,既分数 ab\,{a\over b},求它的浮点数值(双精度浮点数,保留小数点后 9 位)

输入格式

输入仅一行,包括两个整数 a \,a\,和 b \,b\,(b b\,不为 0)

输出格式

输出也仅一行,分数 ab \,{a\over b}\,的浮点数值(双精度浮点数,保留小数点后 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,说明除法仍然是整除。