piapia123
zh

分数计算器

转换

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

四种输入自动识别,不需要先选模式:`24/36` 是约分、`24 36` 是两个整数求公约数与公倍数、`0.75` 是小数转分数、`1/2 + 1/3` 是分数运算。这几件事看着简单,但两个地方容易出错:最小公倍数长得非常快(连续几个十位数的公倍数就超出 2^53),用普通数字会在不报错的情况下丢低位;而分数运算里分母相乘同样很容易越过安全整数范围。所以这里全程用 BigInt,任意大的整数都精确。小数转分数是精确转换 —— 0.1 就是 1/10,不是「近似成 1/10」。

功能

  • 分数约分,并给出用到的最大公约数
  • 两个整数求最大公约数与最小公倍数,并判断是否互质
  • 小数转分数:十进制小数是精确转换,不是近似
  • 分数四则运算(加减乘除),结果自动约分
  • 假分数同时给出带分数形式
  • 小数与分数的互转给出 12 位小数值
  • 可选连分数近似:π 会收敛到 355/113 这样的简单分数
  • 全程 BigInt,超大整数不丢低位

使用方法

  1. 把分数、两个整数、小数或算式粘进输入框 —— 类型会自动识别
  2. 结果实时出现
  3. 需要近似分数时打开连分数选项
  4. 点某一行的复制按钮取走结果

常见问题

为什么最小公倍数要用 BigInt?
因为它长得非常快:21 与 6 的最小公倍数是 42,但相邻两个十位数的最小公倍数就是 20 位了 —— 超过 2^53 之后,JavaScript 的普通数字会在不报错的情况下丢掉低位,你拿到一个看起来正常、其实错了的数字。求公约数与公倍数的题目恰好常出现在这类大数上。
0.1 转成分数是精确的吗?
在这个工具里是。十进制小数转分数是精确定义的操作:0.1 就是 1/10,因为 0.1 这个写法本身就表示十分之一。(顺带一提,0.1 在二进制浮点里是无限循环小数 —— 那是另一回事,这里从字符串解析,不经过浮点。)
连分数近似是什么?
一种把任意实数逼近成简单分数的方法,而且每一步给出的都是「分母不超过某个数的所有分数里最接近的那个」。所以 π 会依次逼近成 3、22/7、333/106、355/113 —— 355/113 精确到小数点后 6 位,而分母只有三位数。做工程估算时很好用。
支持负数与带分数输入吗?
支持负数:`-24/36`、`1/-2` 都认,结果会统一成一个写法(分母的负号搬到分子上)。带分数(如 `2 1/3`)目前需要先化成假分数 `7/3` 再输入 —— 因为「两个整数」那种写法已经被公约数占用了,两者无法区分。

相关工具